Bạn có sự kết hợp giữa SQL và SQL động trong truy vấn của mình đối với information_schema
. Ngoài ra QUOTENAME
không cần thiết trong mệnh đề where và sẽ thực sự ngăn không cho khớp, vì SQL Server lưu trữ column_name
, không phải [column_name]
, trong siêu dữ liệu. Cuối cùng, tôi sẽ thay đổi nó thành sys.columns
vì đây là cách chúng ta nên lấy siêu dữ liệu trong SQL Server
. Hãy thử:
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, '');