Как мне вызвать вывод в табличном формате, чтобы я мог запросить его? - PullRequest
0 голосов
/ 04 октября 2019

Отформатированный набор кода дает мне вывод в табличном формате. Мне нужно найти способ назвать этот набор кода, как мы называем таблицу.

Мне нужно вставить мои выходные значения в другую таблицу.

Это кажется простой задачей, но я не могу понять, как вставить имя.

 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
)

PS Извините, если я не могу объяснить проблему очень хорошо. Я еще учусь.

1 Ответ

1 голос
/ 04 октября 2019

Вы, кажется, говорите, что ваш код работает нормально, вы запускаете свою хранимую процедуру в 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», и они не укажут значение столбца по умолчанию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...