我有一个变量表:
DECLARE @A_Table TABLE(ID INT, att1 VARCHAR(100), att2 nvarchar(200))
我想制作动态sql,所以我在这个表中插入了一些数据(都在一个循环内):
WHILE (@i <= 100) BEGIN
SELECT @other_att = NAME FROM @other_Table where ID = @i;
SET @sql = 'INSERT ' + @A_Table+ '(ID,att1,att2) SELECT '+CAST(@i AS VARCHAR)+' , '''+ @other_att+''', SUM('+ @other_att') FROM '+ @EVEN_OTHER_Table;
EXEC (@sql);
END
sql 每次看起来像:
INSERT INTO @A_Table SELECT 1 , 'subject', SUM(subject)
INSERT INTO @A_Table SELECT 2 , 'age', SUM(age)
INSERT INTO @A_Table SELECT 3 , 'sex', SUM(sex)....
执行此操作后:
所以我会得到:
@A_Table:
id att1 att2
1 subject 4.3
2 age 4.5
3 sex 4.1
但我收到一个错误:
Msg 137, Level 16, State 1, Line 48
Must declare the scalar variable "@A_Table".
那么动态插入变量表的语法是什么?
好的,我已经明白了。
最佳答案
您可以使用 INSERT ... EXEC
插入由动态 SELECT 返回的数据的语法。当然,您随后需要删除 INSERT
部分来自动态语句。
WHILE (@i <= 100) BEGIN
SELECT @other_att = NAME FROM @other_Table where ID = @i;
SET @sql = 'SELECT '+CAST(@i AS VARCHAR)+' , ''' + @other_att+''', SUM('+ @other_att + ') FROM '+ @EVEN_OTHER_Table;
INSERT INTO @A_Table (ID,att1,att2)
EXEC (@sql);
END
关于sql-server-2008 - 动态插入到变量表语句 SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5196434/