Вы, кажется, говорите, что ваш код работает нормально, вы запускаете свою хранимую процедуру в SSMS, и она выдает результаты в сетке, которую вы хотите ... Вы просто хотите, чтобы она входила в существующую таблицу, а не в результаты SSMSgrid
Вероятно, это будет так же просто, как добавление INSERT INTO table
между CTE и SELECT:
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», и они не укажут значение столбца по умолчанию