首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL SERVER FOR XML EXPLICIT

SQL SERVER FOR XML EXPLICIT
EN

Stack Overflow用户
提问于 2013-06-04 03:03:55
回答 2查看 2K关注 0票数 0

我希望将SELECT FOR XML EXPLICIT语句的结果赋给一个XML变量,例如

代码语言:javascript
复制
CREATE PROCEDURE BILLING_RESPONSE 
AS   DECLARE @Data AS  XML

SET @Data = (SELECT

                1 AS Tag,
                NULL AS Parent,
                NULL AS 'CallTransactions!1!',
                NULL AS 'TCALTRS!2!TRS_DAT_TE!cdata',
                NULL AS 'TCALTRS!2!TRS_CRT_DT!Element'
            UNION ALL
            SELECT
                2 AS Tag,
                1 AS Parent, 
                NULL, 
                TRS_DAT_TE,
                TRS_CRT_DT  
             FROM TCALTRS 
             WHERE TRS_CRT_DT between CONVERT(date,GETDATE()-1) and CONVERT(date,getdate()) and 
             TRS_DAT_TE like '%(Submit Response)%'  
             FOR XML EXPLICIT           
            )

SELECT @DATA
GO

当我执行此查询时,收到以下错误消息1086,级别15,状态1,过程BILLING_RESPONSE,第22行FOR XML子句在视图、内联函数、派生表和子查询中无效,因为它们包含集合运算符。要解决这个问题,可以使用派生表语法包装包含集运算符的SELECT,并在其上应用于XML。

EN

回答 2

Stack Overflow用户

发布于 2013-06-04 03:10:46

如果就是这样,就不需要@Data变量了。让你的sp直接返回查询的结果,你就完成了。

代码语言:javascript
复制
CREATE PROCEDURE BILLING_RESPONSE AS
SELECT

        1 AS Tag,
        NULL AS Parent,
        NULL AS 'CallTransactions!1!',
        NULL AS 'TCALTRS!2!TRS_DAT_TE!cdata',
        NULL AS 'TCALTRS!2!TRS_CRT_DT!Element'
    UNION ALL
    SELECT
        2 AS Tag,
        1 AS Parent, 
        NULL, 
        TRS_DAT_TE,
        TRS_CRT_DT  
     FROM TCALTRS 
     WHERE TRS_CRT_DT between CONVERT(date,GETDATE()-1) and CONVERT(date,getdate()) and 
     TRS_DAT_TE like '%(Submit Response)%'  
     FOR XML EXPLICIT
票数 0
EN

Stack Overflow用户

发布于 2015-06-12 00:35:29

错误不是特别清楚,但它说明您不能在内联子查询中使用FOR XML子句,因为它包含UNION (一种集运算符)

建议的解决方法是将子查询包装在其他内容中,然后单独调用它,例如:

代码语言:javascript
复制
CREATE PROCEDURE BILLING_RESPONSE 
AS   DECLARE @Data AS  XML

;WITH DATA AS(
               SELECT
                1 AS Tag,
                NULL AS Parent,
                NULL AS 'CallTransactions!1!',
                NULL AS 'TCALTRS!2!TRS_DAT_TE!cdata',
                NULL AS 'TCALTRS!2!TRS_CRT_DT!Element'
            UNION ALL
            SELECT
                2 AS Tag,
                1 AS Parent, 
                NULL, 
                TRS_DAT_TE,
                TRS_CRT_DT  
             FROM TCALTRS 
             WHERE TRS_CRT_DT between CONVERT(date,GETDATE()-1) and CONVERT(date,getdate()) and 
             TRS_DAT_TE like '%(Submit Response)%'  
             FOR XML EXPLICIT           
            )
SELECT @Data = (SELECT * FROM DATA FOR XML EXPLICIT)
SELECT @DATA
GO
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16903974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档