将每个表记录插入1列

时间:2018-01-09 02:40:44

标签: sql-server

我是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不是静态的,因此每次执行过程时列数可能会改变。

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