我只想更新表 (myTable) 中的列 (variableA)
仅供参考:另一个界面之前插入了“DUMMY”数据集,稍后我需要使用真实变量/数字更新它们。
下面的代码已经运行良好,但我想知道是否有更“优雅”的解决方案来做到这一点。我想避免/更改最后一行(“SELECT COUNT(*)”等)
DECLARE @variableA nvarchar(10) = '12345'
DECLARE @variableB nvarchar(10) = '67890'
UPDATE TOP (1) myTable
SET variableA = @variableA,
timestamp = GETDATE()
WHERE variableB = @variableB
AND variableA = 'DUMMY'
AND (SELECT COUNT(*) FROM myTable WHERE variableA = @variableA) = 0
你能帮我找到一个更聪明的解决方案而不是最后一行吗?
好吧,我会这样写:
UPDATE myTable
SET variableA = @variableA,
timestamp = GETDATE()
WHERE variableB = @variableB
AND variableA = 'DUMMY'
AND NOT EXISTS (
SELECT 1
FROM myTable
WHERE variableA = @variableA
)
首先,使用TOP
不指定ORDER BY
是错误的,因为数据库表本质上是未排序的,这实际上意味着您可能会得到意想不到的结果。
其次,更改(select count) > 0
toexists(select...)
可能会提高性能(除非优化器足够聪明,可以对两种情况使用相同的执行计划)
此外,对于您未来的问题 -请避免使用图像向我们展示示例数据和所需的结果。使用 DDL+DML 显示示例数据,使用文本显示所需结果。如果您这样做,我们可以将您的示例数据复制到测试环境中,并在发布之前实际测试答案。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句