任何人都可以告诉我以下SQL服务器update
语句有什么问题:
IF (SELECT * FROM TBL_SystemParameter WHERE code='SOUND_WRONG_GARMENT') = ''
GO
UPDATE TBL_SystemParameter
SET [Value] = 'Ping.wav'
WHERE ID = (SELECT ID
FROM TBL_SystemParameter
WHERE code = 'SOUND_WRONG_GARMENT')
答案 0 :(得分:4)
您不需要if
语句 - 您可以只运行update语句,如果子查询没有返回任何行,则不会更新任何行。 if
不会真正保存任何内容 - 您正在执行两个查询而不是一个查询。
答案 1 :(得分:2)
虽然Mureinik的答案是对此的合理解决方案,但我会回答为什么这实际上并没有起作用。您的情况有误,而且这种方法可以使用IF EXISTS
:
IF EXISTS (SELECT * FROM TBL_SystemParameter WHERE code='SOUND_WRONG_GARMENT')
BEGIN
UPDATE TBL_SystemParameter
SET [Value] = 'Ping.wav'
WHERE ID IN (SELECT ID
FROM TBL_SystemParameter
WHERE code = 'SOUND_WRONG_GARMENT')
END
作为旁注,您使用=
符号代替IN
,这意味着您将匹配任意单个ID,并且仅基于此更新1行。要使用基于集合的操作,请使用IN
子句。
你可以通过完全取消派生的查询,并在你正在更新的表格上使用简单的WHERE code='SOUND_WRONG_GARMENT'
来实现“高尔夫”。
答案 2 :(得分:2)
你要么
UPDATE TBL_SystemParameter
SET [Value] = 'Ping.wav'
WHERE ID In (SELECT ID
FROM TBL_SystemParameter
WHERE code = 'SOUND_WRONG_GARMENT')
如果该代码有多个ID,请使用
UPDATE TBL_SystemParameter
SET [Value] = 'Ping.wav'
WHERE code = 'SOUND_WRONG_GARMENT'
无论如何都会丢失IF声明,因为@Mureinik说。