Microsoft SQL Server 2012,Management Studio
我需要偶尔更新一个值为零的表中的单行。问题是有250列,所以我不想对列进行硬编码,列数没有修复,下次运行代码时可能会改变。
我有这个SQL代码,它返回我正在寻找的列名。
SELECT
COLUMN_NAME
FROM
information_schema.columns
WHERE
TABLE_NAME = 'TABLE_NAME'
AND COLUMN_NAME <> 'Id'
AND COLUMN_NAME <> 'FkId'
AND COLUMN_Name <> 'Business'
我想要做的是将该查询作为子查询封装到UPDATE
中。
SET (subquery) = '0' WHERE [Id] = someid.
但是我在尝试这个时遇到错误。好像我应该能做到这一点,但我仍然得到错误:
Msg 102,Level 15,State 1,Line 8
附近的语法不正确
&#39;(&#39;。Msg 102,Level 15,State 1,Line 17
&#39; =&#39;附近的语法不正确。
尝试后:
UPDATE TABLE_NAME
SET (SELECT
COLUMN_NAME
FROM
information_schema.columns
WHERE TABLE_NAME = 'TABLE_NAME'
AND COLUMN_NAME <> 'Id'
AND COLUMN_NAME <> 'FkId'
AND COLUMN_Name <> 'Business') = '0'
WHERE
Id = '26524'
我环顾四周,似乎没有SET(子查询)= 0的方法。
难住了。
答案 0 :(得分:3)
试试这样:
DECLARE @SqlCmd VARCHAR(MAX) = 'UPDATE TABLE_NAME SET ' +
STUFF(
(
SELECT
',' + COLUMN_NAME + '=0'
FROM
information_schema.columns
WHERE
TABLE_NAME = 'TABLE_NAME'
AND COLUMN_NAME <> 'Id'
AND COLUMN_NAME <> 'FkId'
AND COLUMN_Name <> 'Business'
FOR XML PATH('')
),1,1,'') + ' WHERE SomeWhereCrit=123;'
SELECT @SqlCmd;
--If the select shows the correct command, remove the double minus before EXEC
--EXEC(@SqlCmd);