有没有更好的方法来检查数据库中是否有适用于更新和插入的唯一值,然后在下面

时间:2015-08-30 23:12:48

标签: sql-server unique

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)

注意:我使用&#34; IF EXISTS(&#34;所以它在找到第一场比赛后停止搜索

注意:我使用&#34; MyTable.RecordId&lt;&gt; @的recordId&#34;所以它不会发现自己是一个匹配。

注意:如果插入recordId将为负1或零。

1 个答案:

答案 0 :(得分:1)

不知道它是否“更好”,但更重要的是:

select
  case 
    when
      exists ( select * from ... where ... )
    then 1 
    else 0 
  end as IsThereOrNot

...并且可以与其他表达式一起使用(如果你需要它们)。

注意:select *适用于存在性检查,而nolock不会改变任何东西 - 对于select的范围存在隐式事务。

如果您为列命名,我认为它更好(消费者更容易使用结果)(示例中为IsThereOrNot)