sql - 使用动态查询将多个变量插入表中
问题描述
我正在尝试使用临时动态查询将数据插入表变量,然后使用该表变量执行最终查询。我有一个错误“必须声明标量变量”
DECLARE @t TABLE ( TableName NVARCHAR(250) )
declare @i as int = 1, @A_1 NVARCHAR(250) ='ABC', @A_2 NVARCHAR(250) ='XYZ', @A_3 NVARCHAR(250) = 'AEI';
WHILE (@i <= 3)
BEGIN
DECLARE @q NVARCHAR(MAX) = ' DECLARE @t TABLE ( TableName NVARCHAR(250) )
insert into @t
select @A_' + CAST(@i AS VARCHAR) + ' as field
from @t
'
INSERT INTO @t
EXEC(@q)
SET @i = @i + 1
END
SELECT * FROM @t
预期的结果应该是:
表名
- 美国广播公司
- XYZ
- AEI
变量 @A_X 可以有 1 或 15 个变量(@A_1、@A_2....@A15)
解决方案
您可以使用临时表代替表变量。看一下这个:
DROP TABLE #TableList
GO
CREATE TABLE #TableList (
A_1 NVARCHAR(250)
,A_2 NVARCHAR(250)
,A_3 NVARCHAR(250)
)
DROP TABLE #Result
GO
CREATE TABLE #Result (
TableName NVARCHAR(250)
)
INSERT INTO #TableList
VALUES('ABC','XYZ','AEI')
DECLARE @q NVARCHAR(MAX)='';
DECLARE @i as int = 1
WHILE (@i <= 3)
BEGIN
SET @q = @q+CHAR(13)+'
INSERT INTO #Result(TableName)
SELECT A_' + CAST(@i AS VARCHAR) + ' from #TableList;'
SET @i = @i + 1
END
EXEC sp_executesql @q
PRINT (@q)
SELECT *
FROM #Result