XML类型的SQL限制

时间:2014-08-28 14:01:31

标签: sql-server xml sql-server-2005 truncate

我实际上正在处理一个大型数据库,我正在查询以下数据;

我的查询:

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行,当在一个字符串中连接时,不适合结果。

1 个答案:

答案 0 :(得分:0)

您看到的截断特定于SQL Server Management Studio(SSMS)。如果您转到查询菜单并选择查询选项... ,请转到结果,然后转到网格,你应该在右侧看到"最大字符检索"的部分。 "非XML数据"最大值为65,535(也应该是默认值)和" 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, '')
       )