如何以表格格式调用输出,以便查询它?

时间:2019-10-04 18:33:12

标签: sql sql-server xml

格式化的代码集以表格格式提供给我输出。 我需要找出一种方法来命名这组代码,就像我们命名一个表一样。

我需要在另一个表中插入输出值。

这似乎是一个简单的任务,但我无法弄清楚如何插入名称。

 exec sp_xml_preparedocument @xmlhandle output, @Data1, @Data2

我尝试使用此^调用程序,但仅执行此语句不会给我输出。

这是程序的外观。

declare @Data1 xml, @Data2 xml

select @Data1 = 
(
    select * 
    from (select * from Test1 except select * from Test2) as a
    for xml raw('Data')
)

select @Data2 = 
(
    select * 
    from (select * from Test2 except select * from Test1) as a
    for xml raw('Data')
)

;with CTE1 as (
    select
        T.C.value('../@ID', 'bigint') as ID,
        T.C.value('local-name(.)', 'nvarchar(128)') as Name,
        T.C.value('.', 'nvarchar(max)') as Value
    from @Data1.nodes('Data/@*') as T(C)    
), CTE2 as (
    select
        T.C.value('../@ID', 'bigint') as ID,
        T.C.value('local-name(.)', 'nvarchar(128)') as Name,
        T.C.value('.', 'nvarchar(max)') as Value
    from @Data2.nodes('Data/@*') as T(C)     
)
select
    isnull(C1.ID, C2.ID) as ID, isnull(C1.Name, C2.Name) as Name, C1.Value as Value1, C2.Value as Value2
from CTE1 as C1
    full outer join CTE2 as C2 on C2.ID = C1.ID and C2.Name = C1.Name
where
not
(
    C1.Value is null and C2.Value is null or
    C1.Value is not null and C2.Value is not null and C1.Value = C2.Value
)

P.S对不起,如果我不能很好地解释这个问题。我还在学习。

1 个答案:

答案 0 :(得分:1)

您似乎在说您的代码运行良好,您在SSMS中运行了存储过程,并在网格中生成了所需的结果。您只希望将其放入现有表而不是SSMS结果中网格

这可能很简单,就像在CTE和SELECT之间添加INSERT INTO table

with CTE1 as (
    select
        T.C.value('../@ID', 'bigint') as ID,
        T.C.value('local-name(.)', 'nvarchar(128)') as Name,
        T.C.value('.', 'nvarchar(max)') as Value
    from @Data1.nodes('Data/@*') as T(C)    
), CTE2 as (
    select
        T.C.value('../@ID', 'bigint') as ID,
        T.C.value('local-name(.)', 'nvarchar(128)') as Name,
        T.C.value('.', 'nvarchar(max)') as Value
    from @Data2.nodes('Data/@*') as T(C)     
)
INSERT INTO table
select
    isnull(C1.ID, C2.ID) as ID, isnull(C1.Name, C2.Name) as Name, C1.Value as Value1, C2.Value as Value2
from CTE1 as C1
    full outer join CTE2 as C2 on C2.ID = C1.ID and C2.Name = C1.Name
where
not
(
    C1.Value is null and C2.Value is null or
    C1.Value is not null and C2.Value is not null and C1.Value = C2.Value
)

如果查询未输出与表中的列相同的一组列,则命名要插入的列:

INSERT INTO table (theId, theName, theValue1, theValue2)

无论如何要明确可能是一个好主意,因为如果将来有人在表中添加一列,那肯定会破坏您的过程。如果您清楚地知道这些列,它可能仍然会破坏,但不是确定,它只会在有人添加“ NOT NULL”的列并且他们没有指定列的默认值的情况下才会破坏