我有下面的T-SQL查询(这将是一个存储过程中):的SQL Server 2016的输出逗号分隔的表名的列表
DECLARE @columnNames nvarchar(MAX);
SELECT
@columnNames = COALESCE(@columnNames + ',','') + sC.name
FROM
sys.columns sC
JOIN
sys.tables AS sT ON sT.object_id = sC.object_id
WHERE
sC.name NOT IN (SELECT name
FROM sys.identity_columns
WHERE is_identity = 1)
AND sT.name = 'Audit'
ORDER BY
sC.column_id
INSERT INTO [B2017].[dbo].[Audit] (@columnNames)
VALUES ('')
如果我跑得这样的:
DECLARE @columnNames nvarchar(MAX);
SELECT
@columnNames = COALESCE(@columnNames + ',','') + sC.name
FROM
sys.columns sC
JOIN
sys.tables AS sT
ON
sT.object_id = sC.object_id
WHERE
sC.name NOT IN (SELECT name FROM sys.identity_columns WHERE is_identity = 1)
AND
sT.name = 'Audit'
ORDER BY
sC.column_id
它显示,因为它应该:
columnName1,columnName2,columnName3,etc...
不过,我想要做的是输出(@columnNames)
为INSERT INTO
这么个我可以随时动态更改Audit
表列名称,而无需编辑存储过程。
因此,采取上面的例子中列名,这就是我想要做的事:
INSERT INTO [B2017].[dbo].[Audit] (columnName1, columnName2, columnName3,etc...)
VALUES ('somevalue1,somevalue2,somevalue3,...')
当试图上面的完整代码(这包括INSERT INTO)我得到这个错误:
Msg 207, Level 16, State 1, Line 51
Invalid column name '@columnNames'
此外,你必须从columnNames删除额外的昏迷。 –