je la requête T-SQL suivante (qui sera à l'intérieur d'une procédure stockée):virgule de sortie SQL Server 2016 seperated liste des noms de table
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 ('')
Si je lance ceci:
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
il affiche comme il se doit:
columnName1,columnName2,columnName3,etc...
Cependant, ce que je veux faire est de sortie qui (@columnNames)
dans une INSERT INTO
si e Je peux changer dynamiquement les noms des colonnes de la table Audit
à tout moment sans avoir besoin de modifier la procédure stockée.
Donc, en prenant les noms de colonnes d'exemple ci-dessus, ce que je suis en train de faire:
INSERT INTO [B2017].[dbo].[Audit] (columnName1, columnName2, columnName3,etc...)
VALUES ('somevalue1,somevalue2,somevalue3,...')
Lorsque vous essayez le code complet ci-dessus (c'est notamment l'instruction INSERT INTO) Je reçois cette erreur:
Msg 207, Level 16, State 1, Line 51
Invalid column name '@columnNames'
Vous devez également supprimer la virgule supplémentaire des noms de colonne. –