2017-08-15 51 views
0

你能帮助我用下面的查询:。如何生成SQL嵌套JSON

我有两个表

[sDocumentManagement] [tDocuments]

[sDocumentManagement] [tDocumentAttachments]

文档表中的每个条目都是针对不同的Document,PK是DocumentID。在DocumentAttachments的表格中,我们可以有一个或多个FK-DocumentID附件。

我想达到的是以下几点。

[ 
    { 
    DocumentID: 1, 
    Something: 'blb', 
    Attachments: [ 
     { 
     AttachmentID: 1, 
     SomethingElse: '23232' 
     } 
    ] 
    }, 
    { 
    DocumentID: 2, 
    Something: 'blb', 
    Attachments: [ 
     { 
     AttachmentID: 12, 
     SomethingElse: '23232' 
     }, 
     { 
     AttachmentID: 13, 
     SomethingElse: '23232' 
     } 
    ] 
    } 
] 

我想从两个表中获取所有信息。

我尝试以下查询

SELECT @DocumentsJSON = (
     SELECT * 
     FROM [sDocumentManagement].[tDocuments] 
     LEFT JOIN [sDocumentManagement].[tDocumentAttachments] ON [tDocuments].DocumentID = [tDocumentAttachments].DocumentID 
    FOR JSON PATH 
    ) 




    SELECT @DocumentsJSON = (
    SELECT 
    (
     SELECT * 
     FROM [sDocumentManagement].[tDocumentAttachments] 
     WHERE [tDocumentAttachments].DocumentID = [tDocuments].DocumentID 
     FOR JSON PATH 
    ) Attachments 
    , * 
    FROM [sDocumentManagement].[tDocuments] 
    FOR JSON PATH 
    ) 
+0

你能证明你到目前为止所尝试过的吗? – Badiparmagi

+0

我试过这两个查询,但仍没有测试它们(检查原始帖子) – VBORISOV

回答

0

好吧,我发现了一个解决方案:

SELECT @DocumentsJSON = (
     SELECT *, 
     (
     SELECT * FROM [sDocumentManagement].[tDocumentAttachments] ATTACHMENTS 
     WHERE ATTACHMENTS.DocumentID = DOCS.DocumentID 
     FOR JSON AUTO 
     ) DocumentAttachments 
     FROM [sDocumentManagement].[tDocuments] DOCS 
     WHERE DOCS.OrganizationID = @OrganizationID 
     FOR JSON PATH, ROOT('Documents') 
) 

但还有另一个问题。

无论我宣布@DocumentsJSON的NVarChar(MAX)输出, 的SQL,则返回只为DocumentsJSON 4500characters? 任何想法问题在哪里?