Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

mise à jour sql avec des noms de colonnes dynamiques

Vous avez un mélange de SQL et de SQL dynamique dans votre requête sur information_schema . Aussi QUOTENAME n'est pas nécessaire dans la clause where et empêchera en fait une correspondance, puisque SQL Server stocke column_name , pas [column_name] , dans les métadonnées. Enfin, je vais le changer en sys.columns puisque c'est ainsi que nous devrions dériver les métadonnées dans SQL Server . Essayez :

SELECT  @colnames += ',' + name 
  FROM Prod.sys.columns
  WHERE OBJECT_NAME([object_id]) = @objname
  AND name <> CASE WHEN @objname = 'TableXx' THEN 'ExcludeCol1' ELSE '' END
  AND name <> CASE WHEN @objname = 'TableYy' THEN 'ExcludeCol2' ELSE '' END;

SET @colnames = STUFF(@colnames, 1, 1, '');