【发布时间】:2019-10-04 18:33:12
【问题描述】:
格式化的代码集以表格格式为我提供输出。 我需要想出一种方法来命名这组代码,就像我们命名一个表一样。
我需要在另一个表中插入我的输出值。
这似乎是一项简单的任务,但我不知道如何插入名称。
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 如果我不能很好地解释这个问题,我很抱歉。我仍在学习。
【问题讨论】:
-
为什么不直接使用另一个 CTE?或者,也许我不明白你想在这里做什么。也许您需要在调用代码中使用变量?
-
您的表是否已经存在?如果是这样,您是要添加还是删除它并仅使用这些最新数据创建一个新的?
-
需要用一条语句调用整个程序。我需要为这个程序命名,以便以后可以使用该名称来查询结果。如果你得到它,请告诉我。 @SeanLange
-
我的表已经存在。我需要添加它。我需要将此代码的输出添加到该表中。 @CaiusJard
-
@YitzhakKhabinsky,一个小小的提示:有一些不错的magic in comments。例如,表达式
[mcve]将自动翻译为您的链接。我在这里做这个:minimal reproducible example
标签: sql sql-server xml