2014-08-28 99 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, '') 
     )