Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

aggiornamento sql con nomi di colonne dinamici

Hai un mix di SQL e SQL dinamico nella tua query su information_schema . Anche QUOTENAME non è necessario nella clausola where e impedirà effettivamente una corrispondenza, poiché SQL Server archivia column_name , non [column_name] , nei metadati. Infine, lo cambierò in sys.columns poiché questo è il modo dovremmo derivare i metadati in SQL Server . Prova:

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, '');