【发布时间】:2013-01-13 18:03:33
【问题描述】:
我计划使用“LIBBOOKS-1214”作为主键,但我做不到。每当我输入另一个信息时,我都想要它,它会生成它作为我的主键。
这是我的代码:
CREATE TABLE tblBookInfo
(
AccessionNumber NVARCHAR(MAX)
DECLARE @RandomNumber NVARCHAR(10);
DECLARE @AccNo NVARCHAR(MAX)
DECLARE @Upper INT;
DECLARE @Lower INT
SET @Lower = 1
SET @Upper = 9999
Select @RandomNumber = Round (((@Upper - @Lower -1)* RAND() + @Lower), 0)
SET @AccNo = 'LIBBOOKS' + @RandomNumber
SELECT @AccNo
Set AccessionNumber = @AccNo
SELECT AccessionNumber
)
感谢您的帮助!非常感激。我还是 SQL-Server 的新手。
【问题讨论】:
-
我已将您的代码放入代码块中。但是,如果您发布的代码有意义,那将是有益的。
-
您的代码不是有效的 SQL。先解决这个问题。 SQL Server 能够处理类型为
(N)VARCHAR(x)的主键。 -
您的随机数绝不保证主键所需的唯一性。如果前缀始终是 LIBBOOKS,是否真的有必要将该部分存储在数据库中?
-
如果要将列设为主键,请注意,任何索引条目的大小最多为 900 字节(为了提高效率应该小得多)。由于
varchar(max)可以是 2 GB,因此您不能索引这样的列。请改用Varchar(20)之类的更合适。不要过度使用/滥用varchar(max)- 仅在绝对需要时使用它 - 请参阅 What's the Point of Using VARCHAR(n) Anymore?
标签: sql sql-server