[英]SQL Combine query on information schema to help build large stored procedures
我想使用INFORMATION_SCHEMA.COLUMNS
來幫助我更快地為具有許多列的表建立存儲過程。
例如,對於我的MERGE語句中具有100列的表中的update子句,我必須執行COLUMN_1 = SOURCE.COLUMN1, COLUMN2...
100次,這並不令人愉快。
我知道我可以從對象瀏覽器中編寫update / create / etc語句的腳本,但是我想控制格式更多一些。 所以:
這個查詢輸出上面提到的每一列的更新格式:
select column_name + ' = SOURCE.' + column_name + ', '
from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME = 'TableName'
不幸的是,它這樣做有多個結果:
COLUMN_1 = SOURCE.COLUMN_1,
COLUMN_2 = SOURCE.COLUMN_2,
etc.
問題:
有人可以告訴我如何修改上面的查詢以連接所有結果,以便輸出看起來更像:
COLUMN_1 = SOURCE.COLUMN_1, COLUMN_2 = SOURCE.COLUMN_2, etc.
PS:我知道如何使用游標循環顯示並達到此結果。 我想找到一種方法在可能的情況下使用樞軸或某些T-SQL函數來實現此目的。
正如EricZ所說,您需要在最后添加FOR XML PATH('')
如果您希望輸出將是varchar而不是xml,請使用強制轉換
select cast((select column_name + ' = SOURCE.' + column_name + ', '
from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME = 'TableName'
FOR XML PATH(''))
as varchar)
你也可以使用變量
declare @str varchar(8000) = ''
select @str += column_name + ' = SOURCE.' + column_name + ', '
from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME = 'TableName'
set @str = left(@str,len(@str))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.