我是SQL Server的新手,所以请耐心等待。
我正在尝试编写一个存储过程,将所有记录插入临时表中的一个列中。
表#1
column1 column2 column3
------- ------- -------
record1 record2 record3
record4 record5 record6
表#2(已编辑)
column1 original_field data_type
------- -------------- ---------
record1 column1 nvarchar
record2 column2 nvarchar
record3 column3 nvarchar
record4 column1 nvarchar
record5 column2 nvarchar
record6 column3 nvarchar
现在我的问题是表#1不是静态的,因此每次执行过程时列数可能会改变。
答案 0 :(得分:0)
这对你们很喜欢,但这里有一个解决方案。
我建议您使用cursors
解决问题。
Cursors
基本上是SQL的while循环。
这个例子也使用了动态SQL的原理,你可能想研究它们。
请将testtb1
的名称更改为您要获取信息的表格的列名称。
请同时将testDB2
的名称更改为要放置数据的表格,并将newcol1
更改为表格testDB2
列的名称,即您所在的列想要插入收集的数据。
declare @TSQL as nvarchar(max)
declare @colname as nvarchar(50)
declare @cursor CURSOR
SET @cursor = CURSOR FOR
(select [name] from sys.columns where object_id = (select object_id from sys.tables where name = 'testtb1'))
OPEN @cursor
FETCH NEXT
FROM @cursor INTO @colname
WHILE @@FETCH_STATUS = 0
BEGIN
set @TSQL = 'insert into testDB2 (newcol1)
select '+@colname+' from testtb1'
exec sp_executesql @TSQL, N'@colname nvarchar(50)', @colname
FETCH NEXT
FROM @cursor INTO @colName
END
CLOSE @cursor
DEALLOCATE @cursor