这是我在任何论坛上寻求SQL帮助的第一篇文章。我总是通过搜索找到我需要的答案(通常在这个网站上)。
我有一个带有变量列名的游标和一个包含列名的where子句。
有人能告诉我为什么会有很多行被更新,但是我的数据永远不会改变吗?#WHold是一个临时表,它保存了我需要循环遍历的列名。它还涉及行数据值。我可以使用一个枢轴表,但是我很好奇为什么这个光标不能工作。
如果运行update语句,则行将被更新。
-我的最新报告
UPDATE MT
SET MT.[10004] = MTD.WHoldAmt
FROM dbo.MyData MT
INNER JOIN dbo.MyDataDetail MTD
ON MT.EEID = MTD.EEID AND MTD.WHold = '10004'--我的光标--
DECLARE @ColumnName VARCHAR(100)
DECLARE @getColumnName CURSOR
DECLARE @MTColumnName VARCHAR(100)
SET @getColumnName = CURSOR FOR
SELECT WHold,'MT.['+WHold+']' FROM #Whold
OPEN @getColumnName
FETCH NEXT FROM @getColumnName INTO @ColumnName,@MTColumnName
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE MT
SET @MTColumnName = MTD.WHoldAmt
FROM dbo.MyData MT
INNER JOIN dbo.MyDataDetail MTD ON MT.EEID = MTD.EEID AND MTD.WHold = @ColumnName
FETCH NEXT
FROM @getColumnName INTO @ColumnName,@MTColumnName
END
CLOSE @getColumnName
DEALLOCATE @getColumnName(531行)
(第8行受影响)
(2757行)
(1行受影响)
(受影响的2行)
(1行受影响)
(14行受影响)
(461行)
(511行受影响)
(17行受影响)
(受影响的第9行)
(3行受影响)
谢谢
发布于 2017-05-17 17:27:26
SQL正在更新@MTColumnName的值,请尝试将查询更改为:
DECLARE @ColumnName VARCHAR(100)
DECLARE @getColumnName CURSOR
DECLARE @SQLUpdate VARCHAR(max) -- Variable to hold SQL Command
SET @getColumnName = CURSOR FOR
SELECT WHold FROM #Whold
OPEN @getColumnName
FETCH NEXT FROM @getColumnName INTO @ColumnName,@MTColumnName
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQLUpdate = 'UPDATE MT SET MT.[' + @ColumnName + '] = MTD.WHoldAmt
FROM dbo.MyData MT INNER JOIN dbo.MyDataDetail MTD ON MT.EEID = MTD.EEID AND MTD.WHold = ''' + @ColumnName + ''''
exec @SQLUpdate
FETCH NEXT
FROM @getColumnName INTO @ColumnName,@MTColumnName
END
CLOSE @getColumnName
DEALLOCATE @getColumnNamehttps://stackoverflow.com/questions/44030915
复制相似问题