SQL Server:唯一的默认值



我有一个表,其中有一列类型为nchar(16),它会自动填充通过将列的默认值设置为dbo.randomtext((16))(标量函数(生成的随机字符。表中将有大约100万条记录。

我知道获得非唯一值的可能性很低,但有没有办法确保这种情况不会发生,并且列真的是唯一的?

如果我将列定义为UNIQUE,并且生成的随机文本不是唯一的,会发生什么?

我使用的是SQL Server 2016标准版。

看起来你真正应该使用的是SEQUENCEIDENTITYuniqueidentity,这闻起来就像你是"重塑";车轮。

至于你问的问题:

我知道获得非唯一值的可能性很低,但有没有办法确保这种情况不会发生,并且列真的是唯一的?

是,在列上创建一个UNIQUE INDEXUNIQUE CONSTRAINT。那么每一行,在该列中都必须有一个唯一的。

如果我将列定义为UNIQUE,并且生成的随机文本不是唯一的,会发生什么?

如果列中已经有至少一个重复项,则创建INDEX/CONSTRAINT将失败;在创建INDEX/CONSTRAINT之前,您需要确保DELETE/UPDATE有任何重复项。如果它是INSERT/UPDATE,它将失败,并且整个DML语句将不起作用(不会插入新行,或者不会更新行(。

最新更新