我想在t-sql中创建一个包含13列(YEAR ||月)的变量表,并将列名存储到数组中。
然后使用循环,我想在每一列中输入数据。
例如:
for i 1..12
insert into @tablename (@i)
是否可以?我需要创建一个游标吗?
我无法正确理解您的问题,这是您要找的吗?
下面的代码将循环三次,并插入到相应的列中。
注意:您不能使用动态SQL来实现表变量。为此,您必须使用物理表或临时表。
DECLARE @fmth varchar(32) = 'January.February.March';
DECLARE @smth varchar(32) = 'April.May.June';
DECLARE @tmth varchar(32) = 'July.August.September';
DECLARE @fomth varchar (32) = 'October.November.December';
DECLARE @mth varchar(10);
DECLARE @i INT =3;
CREATE TABLE #Report
( Year smallint, January int, February int, March int, April int, May int, June int, July int, August int,
September int, October int, November int, December int )
WHILE(@I > 0)
BEGIN
DECLARE @IChar Varchar(5) = CAST(@I AS VArchar(5))
DECLARE @Month1 varchar(20) = PARSENAME(@fmth,@i)
DECLARE @Month2 varchar(20) = PARSENAME(@smth,@i)
DECLARE @Month3 varchar(20) = PARSENAME(@tmth,@i)
DECLARE @Month4 varchar(20) = PARSENAME(@fomth,@i)
-- Do Insert operation here
DECLARE @MyDynamicSQL VARCHAR(4000)
= 'INSERT INTO #Report('+@Month1+','+@Month2+','+@Month3+', '+@Month4+')
VALUES ('+@IChar+','+@IChar+','+@IChar+','+@IChar+')'
EXEC(@MyDynamicSQL)
SET @i = @I - 1
END
SELECT * FROM #Report
DROP TABLE #Report
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句