2014-08-28 42 views
0

我實際上正在處理一個大型數據庫,並且正在查詢以下數據;XML類型的SQL限制

我的查詢:

SELECT ldd.LDistCD, ldd.LDistDescPay 
FROM LDetail ldd 
INNER JOIN LDist ld 
ON   ldd.ID = ld.ID 
AND  ld.ID = '019458' 
AND  ld.LDistType = 'F' 

結果: 87

我接下來做什麼,是跨在我的VB代碼的結果(27873)環路連接的數據中格式如下;

LDistCD + '|' + LDistDescPay 

通常這將是一個非常耗時的循環所有這些行的時間。因此,爲了優化工作,我正在使用以下查詢,它應該已經爲我連接了數據;

SELECT stuff((SELECT ',' + ldd.LddLabourDistCD + '|' + ldd.LddLabourDistDescPay 
       FROM LDetail ldd 
       INNER JOIN LDist ld 
       ON ldd.ID = ld.ID 
       AND ld.ID = 019425 AND ld.LDistType = 'F' 
     FOR XML 
PATH ('')), 1, 1, '') 

一切工作正常,除了結果,其中一些數據被截斷!在MS SQL Server上運行最後一個查詢將返回連接結果,但它不完整。我得到的印象是有超過結果的限制。

任何人都可以幫忙解決這個問題嗎? 我很難上傳數據庫或結果,但只是爲了告訴您,27873行(當連接在一個字符串中)不適合結果。

+0

是將結果連接到VB代碼時的結果還是隻是在SSMS中看到的結果?返回的數據的長度是多少?通過轉到查詢選項,SSMS中有兩個限制:2 MB用於XML,65535用於非XML。這些是默認值,您可以增加XML限制,但不能增加非XML限制。但是這些限制不會影響發回客戶端的內容,正如你在SSMS中看到的一樣。 – 2014-08-28 14:07:03

+0

在MSSQL上運行查詢和VB時,我得到了相同的結果。連接27800+行的2列,輸出一個大字符串! – 2014-08-28 14:37:18

+0

那麼返回到VB代碼中的字符串的長度是多少? – 2014-08-28 14:41:59

回答

0

您看到的截斷特定於SQL Server Management Studio(SSMS)。如果你去查詢菜單,然後選擇查詢選項...,然後去結果然後電網,你應該在右側看到「檢索的最大字符」的部分。在「非XML數據」有65,535 MAX(這也應該是默認)和「XML數據」是一個下拉菜單的選項:

  • 1 MB
  • 2 MB(默認值)
  • 5 MB
  • 無限

由於XML數據類型可以帶回超過65,535個字符,您可以將輸出轉換爲XML(這是隻需要使用SSMS時,客戶端庫應回拉滿弦):

SELECT CONVERT(XML, 
     stuff((SELECT ',' + ldd.LddLabourDistCD + '|' + ldd.LddLabourDistDescPay 
     FROM LDetail ldd 
     INNER JOIN LDist ld 
     ON ldd.ID = ld.ID 
     AND ld.ID = 019425 
     AND ld.LDistType = 'F' 
     FOR XML PATH ('')), 1, 1, '') 
     )