我有这个SQL脚本:
DECLARE @Loop INT
SET @Loop = 1
DECLARE @Result table([1] int, [2] int,[3] int,[4] int,[5]);
WHILE (@Loop <=5)
BEGIN
INSERT INTO @Result(@Loop)
SELECT Id FROM Students WHERE Id=@Loop
SET @Loop= @Loop+ 1
END
我在这行中遇到错误:
INSERT INTO @Result(@Loop)
是否可以使用这种方式使用循环将数据插入列名?我的意思是动态
由于
答案 0 :(得分:1)
这就像我能得到的一样接近。
我使用动态sql构建插入sql。
我使用临时表#Result
而不是变量@Result
,因为@Result
变量的范围意味着此技术不起作用。
DECLARE @Loop INT;
SET @Loop = 1;
CREATE TABLE #Result([1] int, [2] int, [3] int, [4] int, [5] int);
DECLARE @Sql AS NVARCHAR(MAX);
DECLARE @LoopNVARCHAR AS NVARCHAR(10);
WHILE (@Loop <= 5)
BEGIN
SET @LoopNVARCHAR = CAST(@Loop AS NVARCHAR(10));
SET @Sql = N'INSERT INTO #Result([' + @LoopNVARCHAR + ']) SELECT Id FROM Students WHERE Id = ' + @LoopNVARCHAR;
exec (@Sql)
SET @Loop = @Loop + 1
END
SELECT * FROM #Result
DROP TABLE #Result