T-Sql
連接的字元串被截斷
我有一個查詢,我正在編寫將一些帶有主鍵的堆表轉換為聚群表,但是我生成的字元串似乎截斷了超過一定長度的對象。
SELECT --t.name, -- t.schema_id, -- t.type, -- t.type_desc, -- i.name, -- i.type, -- i.type_desc, -- i.is_primary_key, --c.name, 'print ''dropping index on dbo.' + CAST(t.name AS VARCHAR(MAX)) + ''';' + CAST(CHAR(10) AS VARCHAR(MAX)) + CAST(CHAR(13) AS VARCHAR(MAX)) + 'drop index ' + CAST(i.name AS VARCHAR(MAX)) + ' on dbo.' + CAST(t.name AS VARCHAR(MAX)) + ';' + CAST(CHAR(10) AS VARCHAR(MAX)) + CAST(CHAR(13) AS VARCHAR(MAX)) + 'go' + CAST(CHAR(10) AS VARCHAR(MAX)) + CAST(CHAR(13) AS VARCHAR(MAX)) + 'print ''creating clustered primary key on dbo.' + CAST(t.name AS VARCHAR(MAX)) + ''';' + CAST(CHAR(10) AS VARCHAR(MAX)) + CAST(CHAR(13) AS VARCHAR(MAX)) + 'alter table dbo.' + CAST(t.name AS VARCHAR(MAX)) + ' add constraint ' + CAST(i.name AS VARCHAR(MAX)) + ' primary key clustered (' + CAST(c.name AS VARCHAR(MAX)) + ');' FROM sys.tables t INNER JOIN sys.indexes i ON i.object_id = t.object_id INNER JOIN sys.index_columns ic ON i.object_id = ic.object_id AND i.index_id = ic.index_id INNER JOIN sys.columns c ON t.object_id = c.object_id AND ic.index_column_id = c.column_id WHERE i.type = 2 AND t.object_id NOT IN ( SELECT distinct t.object_id AS tableid FROM sys.tables t INNER JOIN sys.indexes i ON t.object_id = i.object_id WHERE i.type = 1 ) ORDER BY t.name, i.index_id
如您所見,我嘗試將我正在使用的所有列包裝在 cast 語句中,但它沒有幫助。我不確定為什麼這不起作用。
完整程式碼範例:
print 'dropping index on dbo.Account'; drop index PK_Account on dbo.Account; go print 'creating clustered primary key on dbo.Account'; alter table dbo.Account add constraint PK_Account primary key clustered (Id);
截斷程式碼範例:
drop index PK_ALongerTableNameABC on dbo.ALongerTableNameABC; go print 'creating clustered primary key on dbo. ALongerTableNameABC'; alter table dbo.ALongerTableNameABC add constraint PK_ALongerTableNa
我通過使用 Results to Text 執行查詢來獲取生成的程式碼。
原因是預設結果到文本選項的最大顯示字元數設置為 256 個字元。這就是文本輸出的其餘部分被截斷的原因。
嘗試 Grid 的結果,你應該是一個快樂的露營者 :-)
所以我找到了兩種方法來解決這個問題,@FlogDonkey 讓我走上了正確的道路。
對於顯示的最大字元,有一個“結果到文本”選項,我將其從 256 覆蓋到 1000 並且它有效。
我還發現在結果到網格中,您可以將其設置為在復製或保存時保留 CR/LF。
但是,我確實必須重新啟動 SSMS 才能使這些更改生效。