【发布时间】:2015-08-30 23:12:47
【问题描述】:
IF EXISTS(SELECT * FROM MyTable WITH (NOLOCK) WHERE MyTable.RecordId <> @RecordId AND MyTable.UniqueColumn = @UniqueValue)
BEGIN
SELECT 1
END
ELSE
BEGIN
SELECT 0
END
注意:我使用 NOLOCK,因此它会检查待处理的插入和更新(即有人更新/更改 UniqueColumn)
注意:我使用“IF EXISTS(”,所以它会在找到第一个匹配项后停止搜索
注意:我使用“MyTable.RecordId @RecordId”,这样它就不会发现自己是匹配项。
注意:如果插入 recordId 将为负一或零。
【问题讨论】:
-
请定义“更好”:更快?代码少?更清晰的代码?
-
有没有更快的方法让这段代码在不丢失任何功能的情况下执行?
-
试试 select 1 而不是 select *
-
@dman2306:这没有任何区别,因为
IF EXISTS()只检查行的存在 - 它实际上并不返回 任何数据(它返回 0 或 1,取决于行是否存在)。 -
如果
MyTable.UniqueColumn上有索引,并且@UniqueValue的数据类型与MyTable.UniqueColumn的数据类型相同,那么您的查询将执行得非常快。
标签: sql-server unique