这个问题在这里已有答案:
现在我有一个成员表,表主键'id'自动递增 .
我想要而不是自动递增,它将 generate a random integer of 5-6 digits 并将其设为' id '. As every 'id'是主键,因此生成的int将是唯一的 . 在sql server上实现这一点的任何想法都会有所帮助 .
尝试使用如下的RAND函数生成6位数的随机数
select ceiling(RAND()*1000000)
您可以将 CHECKSUM 与 NEWID() 一起使用,并将其用作 DEFAULT .
CHECKSUM
NEWID()
DEFAULT
SELECT ABS(CHECKSUM(NEWID())) % 100000
如果要将数字限制为最多5位,则 % 100000 是可选的 .
% 100000
Note: 使用随机生成的群集密钥将导致插入期间的页面拆分 .
为避免猜测用户总数,只需在创建数据库时添加随机值作为初始值 .
CREATE TABLE users ( ID int identity (7854, 7), )
当还指定增量值> 1时,您当然会丢失值 . 使用预期的记录数检查值范围 .
另一个(更好)选项是隐藏用户的主键,如果他们需要查看某些标识,他们应该看到一个与主键分开的值 . 向表中添加另一个值,称为“可见ID”或其他值 .
CREATE TABLE NEWID_TEST ( ID UNIQUEIDENTIFIER DEFAULT NEWID() PRIMARY KEY, TESTCOLUMN CHAR(2000) DEFAULT REPLICATE('X',2000) ) GO
-- or use
CREATE TABLE NEWSEQUENTIALID_TEST ( ID UNIQUEIDENTIFIER DEFAULT NEWSEQUENTIALID() PRIMARY KEY, TESTCOLUMN CHAR(2000) DEFAULT REPLICATE('X',2000) ) GO
4 回答
尝试使用如下的RAND函数生成6位数的随机数
您可以将
CHECKSUM
与NEWID()
一起使用,并将其用作DEFAULT
.如果要将数字限制为最多5位,则
% 100000
是可选的 .Note: 使用随机生成的群集密钥将导致插入期间的页面拆分 .
为避免猜测用户总数,只需在创建数据库时添加随机值作为初始值 .
当还指定增量值> 1时,您当然会丢失值 . 使用预期的记录数检查值范围 .
另一个(更好)选项是隐藏用户的主键,如果他们需要查看某些标识,他们应该看到一个与主键分开的值 . 向表中添加另一个值,称为“可见ID”或其他值 .
-- or use