我有一个表,其中有一列类型为nchar(16)
,它会自动填充通过将列的默认值设置为dbo.randomtext((16))
(标量函数(生成的随机字符。表中将有大约100万条记录。
我知道获得非唯一值的可能性很低,但有没有办法确保这种情况不会发生,并且列真的是唯一的?
如果我将列定义为UNIQUE
,并且生成的随机文本不是唯一的,会发生什么?
我使用的是SQL Server 2016标准版。
看起来你真正应该使用的是SEQUENCE
、IDENTITY
或uniqueidentity
,这闻起来就像你是"重塑";车轮。
至于你问的问题:
我知道获得非唯一值的可能性很低,但有没有办法确保这种情况不会发生,并且列真的是唯一的?
是,在列上创建一个UNIQUE INDEX
或UNIQUE CONSTRAINT
。那么每一行,在该列中都必须有一个唯一的。
如果我将列定义为
UNIQUE
,并且生成的随机文本不是唯一的,会发生什么?
如果列中已经有至少一个重复项,则创建INDEX
/CONSTRAINT
将失败;在创建INDEX
/CONSTRAINT
之前,您需要确保DELETE
/UPDATE
有任何重复项。如果它是INSERT
/UPDATE
,它将失败,并且整个DML语句将不起作用(不会插入新行,或者不会更新行(。