我正在运行一个SQL循环来更新声明的表。请看下面的
DECLARE @tblResults TABLE ( [idx] INT IDENTITY(0,1)
,[cityCode] VARCHAR(3)
,[month_1_perc] INT
,[month_2_perc] INT
,[month_3_perc] INT
,[month_4_perc] INT
,[month_5_perc] INT
,[month_6_perc] INT
,[month_7_perc] INT
,[month_8_perc] INT
,[month_9_perc] INT
,[month_10_perc] INT
,[month_11_perc] INT
,[month_12_perc] INT)
循环将从这里开始
DECLARE @colName VARCHAR(15)
DECLARE @sqlExec VARCHAR(500) = CONACT('UPDATE @tblResults SET [month_', @colName, '_perc] = 9;
EXECUTE(@sql)
环
这显然不起作用 - 我试图找到一个工作,如果有的话 - 接受建议
答案 0 :(得分:0)
DECLARE @colName VARCHAR(15)
DECLARE @sqlExec VARCHAR(500)
SET @colName = '1'
SET @sqlExec = 'UPDATE @tblResults SET [month_' + @colName + '_perc] = 9'
EXECUTE( @sqlExec)
答案 1 :(得分:0)
我对你的请求有点困惑,但如果你真的想使用循环
declare @i int = 1;
declare @sqlUpdate nvarchar(max) = 'UPDATE tblResults SET ';
declare @sql;
while @i <= 12
BEGIN
set @sql = @sqlUpdate + '[month_' + cast(@i as nvarchar(5)) + '_perc] = 9;' -- value?
print (@sql)
-- execute (@sql)
set @i = @i + 1;
END
或者您想一次性为所有列设置相同的值
declare @cols nvarchar(max)
select @cols = STUFF((SELECT ',' + QUOTENAME(col.name) + ' = 9' -- value?
from tempdb.sys.columns col
join tempdb.sys.tables tab on col.object_id = tab.object_id
where tempdb.tab.name = 'tblResults'
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
declare @sql nvarchar(max) = 'UPDATE tblResults SET ' + @cols;
print (@sql)
-- execute (@sql)
注意,没有测试任何脚本