我需要使一列 varchar(500) 唯一。
放置唯一约束将不起作用,因为它超过了唯一的大小限制。
那么,使列独一无二的最佳策略是什么?
user841123
问问题
1889 次
2 回答
4
使用 that 的 HASH 创建另一个字段varchar(500)
,并将 aUNIQUE CONSTRAINT
放在哈希字段上:HASHBYTES('md5', MyLongVarcharField)
这将导致性能不佳,但如果您有varchar(500)
需要强制执行唯一性的地方,我假设性能无论如何都不是您考虑的首要因素。
编辑:
澄清一下,两个字符串输出相同的 128 位哈希值的机会是1 in 340,282,366,920,938,000,000,000,000,000,000,000,000
. 发生碰撞的可能性不大,但并非绝对不可能。
如果您仍然担心,您可以使用160 位的算法SHA
。SHA1
于 2011-10-03T18:28:31.703 回答
1
You can use a DML trigger on INSERT and UPDATE. This gets around having to use a hash. I chose an AFTER trigger for simplicity, but this can be easily done with an INSTEAD OF trigger as well.
create trigger dml_EnforceUniqueVal
on dbo.UniqueBigColumn
after insert, update
as
declare @CountOfRepeats int
select @CountOfRepeats = COUNT(*)
from UniqueBigColumn
where somestring in
(
select somestring
from inserted
)
if @CountOfRepeats > 1
rollback
go
于 2011-10-03T22:03:03.513 回答