有没有更好的方法来检查数据库是否有适用于更新和插入的唯一值然后在下面
Is there a better way to check the database for a unique value that works for both update and insert then below
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 将为负一或零。
不知道是不是"better",不过比较中肯:
select
case
when
exists ( select * from ... where ... )
then 1
else 0
end as IsThereOrNot
...并且可以与其他表达式一起使用(如果您需要它们)。
注意:select * 适用于存在性检查,nolock 不会改变任何东西 - select.
范围内有一个隐式事务
我认为为列命名(示例中为 IsThereOrNot)会更好(消费者更容易使用结果)
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 将为负一或零。
不知道是不是"better",不过比较中肯:
select
case
when
exists ( select * from ... where ... )
then 1
else 0
end as IsThereOrNot
...并且可以与其他表达式一起使用(如果您需要它们)。
注意:select * 适用于存在性检查,nolock 不会改变任何东西 - select.
范围内有一个隐式事务我认为为列命名(示例中为 IsThereOrNot)会更好(消费者更容易使用结果)