带有更新列名变量的 CURSOR

CURSOR with Update Column Name Variable

这是我第一次 post 在任何论坛上寻求有关 SQL 的帮助。我总是通过搜索(通常在这个网站上)找到我需要的答案。

我有一个带有可变列名的游标和一个包含列名的 where 子句。

谁能告诉我为什么它说很多行已更新但我的数据从未改变? #WHold 是一个临时文件 table,它包含我需要循环的列名。它还与行数据值有关。我可以使用枢轴 table 但我很好奇为什么这个光标不起作用。

如果我 运行 一个更新语句,行就会更新。

---我的更新语句---

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

---来自游标的结果虽然 none 的数据在 table MyData 中被更改---

(531 行受影响)

(8 行受影响)

(2757 行受影响)

(1 行受影响)

(2 行受影响)

(1 行受影响)

(14 行受影响)

(461 行受影响)

(511 行受影响)

(17 行受影响)

(9 行受影响)

(3 行受影响)

谢谢

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 @getColumnName