基本上我想循环遍历一个临时表,列出某些需要更新的表名,我拿每个表名用它来填充所有要更新的ID的临时表。
我可以使用这种结构选择需要更新的每个表中的数据,但似乎无法运行内部游标,因为它没有获取临时表..
任何帮助都会非常感激,因为过去几个小时我一直在努力。
干杯,
DECLARE @table INT
DECLARE @prefix nvarchar(3)
DECLARE @TableName nvarchar(50)
DECLARE @TableIdName nvarchar(50)
DECLARE @getTable CURSOR
SET @getTable = CURSOR FOR
SELECT DISTINCT(id)
FROM @t
OPEN @getTable
FETCH NEXT
FROM @getTable INTO @table
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @TableName = name FROM @t WHERE id = @table
SET @TableIdName = @TableName + 'Id'
SELECT @prefix = prefix FROM @t WHERE name = @TableName
--PRINT @table
PRINT @TableName
--PRINT @TableIdName
--PRINT @prefix
DECLARE @temptable table(rid int, rTableName nvarchar(50), rprefix nvarchar(3), rpk nvarchar(50))
EXEC ('INSERT INTO ' + @temptable + ' SELECT ' + @TableIdName + ', ' + @TableName + ', ' + @prefix + @TableIdName + ' FROM ' + @TableName)
DECLARE @rTableName nvarchar(50)
DECLARE @rpk nvarchar(50)
DECLARE @rprefix nvarchar(3)
DECLARE @row INT
DECLARE @getRow CURSOR
SET @getRow = CURSOR FOR
SELECT DISTINCT(rid)
FROM @temptable
OPEN @getRow
FETCH NEXT
FROM @getRow INTO @row
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT @row
SELECT @rTableName = rTableName FROM @temptable WHERE rid = @row
SELECT @rpk = rpk FROM @temptable WHERE rid = @row
SELECT @rprefix = rprefix FROM @temptable WHERE rid = @row
EXEC ('UPDATE ' + @rTableName + ' SET CoiRef = ' + @rprefix + '_' + @row + ' WHERE ' + @rpk + ' = ' + @row)
FETCH NEXT
FROM @getRow INTO @row
END
CLOSE @getRow
DEALLOCATE @getRow
FETCH NEXT
FROM @getTable INTO @table
END
CLOSE @getTable
DEALLOCATE @getTable
我还尝试了使用sp_executesql
的其他解决方案,但在那里遇到了类似的错误,这是在第一个EXEC上使用以下代码。
DECLARE @sqlCommand nvarchar(500)
SET @sqlCommand = 'INSERT INTO @temptable SELECT TableIdName, TableName, prefix, TableIdName FROM' + @TableName
EXECUTE sp_executesql @sqlCommand, N'@temptable nvarchar(50) output', @temptable OUTPUT
再次,非常感谢任何帮助..
谢谢..
格里
答案 0 :(得分:0)
我认为错误来自于您尝试在动态sql中使用表变量的事实。这不是支持的,因为表变量超出了动态sql的范围。您应该使用create table命令将@temptable放入临时表中。
在未经请求的建议类别中,我建议尝试在不使用游标的情况下重新创建它,因为游标违背了基于集合的处理的概念,这是sql server的基础。