创建插入表的列名列表

时间:2016-09-09 14:50:24

标签: sql sql-server database tsql

我正在进行一个查询,我需要在一个表和一个具有相同列名的临时表中插入行。

我想避免在每个insert语句中重复列名,而是希望创建一个列表并将列表传递给insert语句。

这是我到目前为止所拥有的:

DECLARE @columnNameList varchar(MAX) = COALESCE(RecType, ColumnName, 
    SourcePosition, MaxWidth, isNullable, dotNetDataType, [Format])

EXEC('INSERT INTO #RowList (' + @columnNameList + ')
    VALUES......

几乎有效。我得到的每个列名都有一个错误,如下所示:

  

无效的列名称'RecType'

认为错误是因为列名在它周围有单引号,因为它被转换为字符串。

有没有办法构建列对象列表而不是要传入的字符串?

2 个答案:

答案 0 :(得分:0)

您可以使用myTableNameSTUFFXML PATH

的逗号分隔表格的所有列(此处为select STUFF((select ','+a.name from sys.all_columns a join sys.tables t on a.object_id = t.object_id and t.name = 'myTableName' order by a.column_id for xml path ('') ),1,1,'') )创建一行
column1,column2,...,columnN

<强>输出

$("#" + myVariable)

答案 1 :(得分:0)

请尝试以下查询。

create table #rowlist (RecType int, ColumnName int, 
    SourcePosition int, MaxWidth int, isNullable int, dotNetDataType int, [Format] int)

DECLARE @columnNameList nvarchar(MAX) ='(RecType, ColumnName, 
    SourcePosition, MaxWidth, isNullable, dotNetDataType, [Format])'

DECLARE @SQLCMD nvarchar(MAX) =N'INSERT INTO #RowList ' + @columnNameList + N' VALUES (1,1,1,1,1,1,1)'

exec(@sqlcmd)