我正在进行一个查询,我需要在一个表和一个具有相同列名的临时表中插入行。
我想避免在每个insert语句中重复列名,而是希望创建一个列表并将列表传递给insert语句。
这是我到目前为止所拥有的:
DECLARE @columnNameList varchar(MAX) = COALESCE(RecType, ColumnName,
SourcePosition, MaxWidth, isNullable, dotNetDataType, [Format])
EXEC('INSERT INTO #RowList (' + @columnNameList + ')
VALUES......
这几乎有效。我得到的每个列名都有一个错误,如下所示:
无效的列名称'RecType'
我认为错误是因为列名在它周围有单引号,因为它被转换为字符串。
有没有办法构建列对象列表而不是要传入的字符串?
答案 0 :(得分:0)
您可以使用myTableName
和STUFF
和XML 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)