Sql-Server
動態SQL從表中選擇所有列的優化方式是什麼?
我剛剛生成了這個腳本。它將動態地從表中選擇所有列。
是否有替代或更清潔、有效的方式來執行此操作?另外,我想為每一列放置換行符;char(10) 和 char(13) 不起作用。
declare @Tablename nvarchar(max) = 'dbo.customer' DECLARE @qry NVARCHAR(MAX) = 'SELECT ' + STUFF(( SELECT ', ' + char(10) + char(13) + QUOTENAME(c.name) FROM sys.columns c where c.object_id = object_id(@Tablename) FOR XML PATH(''), TYPE).value('.','nvarchar(max)'),1,2,'') + ' FROM ' + @Tablename ; select @qry
目前結果
SELECT [customerid], [customernamename] FROM dbo.customer
預期結果:
SELECT [customerid], [customernamename] FROM dbo.customer
我不確定是否有更有效的方法來檢索列列表,但我將使用以下範例解決換行問題(我將您的 char(10) + char(13) 反轉為 char(13 ) + 字元 (10)。
DROP TABLE IF EXISTS dbo.Customers; CREATE TABLE [dbo].[Customers]( [CustomerID] [int] NULL, [CustomerName] [varchar](50) NULL ) ON [PRIMARY] GO declare @Tablename nvarchar(max) = 'dbo.customers' DECLARE @qry NVARCHAR(MAX) = 'SELECT ' + STUFF(( SELECT ', ' + char(13) + char(10) + QUOTENAME(c.name) FROM sys.columns c where c.object_id = object_id(@Tablename) FOR XML PATH(''), TYPE).value('.','nvarchar(max)'),1,2,'') + + char(13) + char(10) + 'FROM ' + @Tablename ; select @qry
SELECT [CustomerID], [CustomerName] FROM dbo.customers
您可以將 SSMS 輸出更改為文本,或者,如果您更喜歡網格視圖,請確保執行以下操作:
- 工具 > 選項
- 展開查詢結果 > SQL Server > 結果到網格
- 勾選 Retain CR/LF on copy or save
- 重啟 SSMS