簡體   English   中英

SQL結合信息模式查詢以幫助構建大型存儲過程

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM