格式化的代码集以表格格式提供给我输出。 我需要找出一种方法来命名这组代码,就像我们命名一个表一样。
我需要在另一个表中插入输出值。
这似乎是一个简单的任务,但我无法弄清楚如何插入名称。
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对不起,如果我不能很好地解释这个问题。我还在学习。
答案 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”的列并且他们没有指定列的默认值的情况下才会破坏