Слияние - когда совпадает, то ничего не делать - PullRequest
2 голосов
/ 31 октября 2019

Мне нужно написать оператор MERGE для вставки данных, если условие НЕ СООТВЕТСТВУЕТ, ЕСЛИ СООТВЕТСТВУЕТ, я бы хотел, чтобы запрос ничего не делал, но я должен включить это условие, потому что мне крайне необходимо перехватить исходные данные из обоих условийв мою выходную таблицу.

Вот мой код:

                MERGE dm_data_bps.dbo.akcja AS target
            USING (
                SELECT *
                FROM #CEIDG
                WHERE isnull(sp_id, '') <> ''
                ) AS source
                ON target.ak_id = source.ceidg_ak_id
            WHEN NOT MATCHED
                THEN
                    INSERT (
                        ak_akt_id
                        ,ak_sp_id
                        ,ak_kolejnosc
                        ,ak_interwal
                        ,ak_zakonczono
                        ,ak_pr_id
                        ,ak_publiczna
                        )
                    VALUES (
                        1246
                        ,sp_id
                        ,0
                        ,0
                        ,getdate()
                        ,5
                        ,1
                        )
            WHEN MATCHED
                THEN
                    UPDATE
                    <DO NOTHING>
            OUTPUT inserted.ak_id
                ,source.Firma
                ,source.AdresPocztyElektronicznej
                ,source.AdresStronyInternetowej
                ,source.IdentyfikatorWpisu
                ,source.DataRozpoczeciaWykonywaniaDzialalnosciGospodarczej
                ,source.DataZawieszeniaWykonywaniaDzialalnosciGospodarczej
                ,source.DataWznowieniaWykonywaniaDzialalnosciGospodarczej
                ,source.DataZaprzestaniaWykonywaniaDzialalnosciGospodarczej
                ,source.DataWykresleniaWpisuZRejestru
                ,source.MalzenskaWspolnoscMajatkowa
                ,source.SpolkiCywilneKtorychWspolnikiemJestPrzedsiebiorcaNIP
                ,source.SpolkiCywilneKtorychWspolnikiemJestPrzedsiebiorcaREGON
                ,source.Zakazy
                ,source.InformacjeDotyczaceUpadlosciPostepowaniaNaprawczego
                ,source.Sukcesja
                ,source.AdresGlownegoMiejscaWykonywaniaDzialalnosci
                ,source.AdresyDodatkowychMiejscWykonywaniaDzialalnosci
                ,source.AdresyDodatkowychMiejscWykonywaniaDzialalnosci2
                ,source.AdresDoDoreczen
                ,source.STATUS
            INTO #ceidg_ak_id;

Как мне достичь своей цели?

1 Ответ

2 голосов
/ 31 октября 2019

Я не уверен, что буду беспокоиться обо всех накладных расходах, которые идут с оператором MERGE. См. Будьте осторожны с оператором MERGE SQL Server .

Вы можете получить все, что вам нужно, с явной транзакцией.

BEGIN TRANSACTION;

UPDATE
  target
SET
  ak_akt_id = 1246
 ,ak_sp_id = sp_id
 ,ak_kolejnosc = 0
 ,ak_interwal = 0
 ,ak_zakonczono = GETDATE()
 ,ak_pr_id = 5
 ,ak_publiczna = 1
FROM
  dm_data_bps.dbo.akcja AS target
JOIN
  (SELECT * FROM #CEIDG WHERE sp_id <> '') AS source
    ON
    target.ak_id = source.ceidg_ak_id;

SELECT
  Firma
 ,AdresPocztyElektronicznej
 ,AdresStronyInternetowej
 ,IdentyfikatorWpisu
 ,DataRozpoczeciaWykonywaniaDzialalnosciGospodarczej
 ,DataZawieszeniaWykonywaniaDzialalnosciGospodarczej
 ,DataWznowieniaWykonywaniaDzialalnosciGospodarczej
 ,DataZaprzestaniaWykonywaniaDzialalnosciGospodarczej
 ,DataWykresleniaWpisuZRejestru
 ,MalzenskaWspolnoscMajatkowa
 ,SpolkiCywilneKtorychWspolnikiemJestPrzedsiebiorcaNIP
 ,SpolkiCywilneKtorychWspolnikiemJestPrzedsiebiorcaREGON
 ,Zakazy
 ,InformacjeDotyczaceUpadlosciPostepowaniaNaprawczego
 ,Sukcesja
 ,AdresGlownegoMiejscaWykonywaniaDzialalnosci
 ,AdresyDodatkowychMiejscWykonywaniaDzialalnosci
 ,AdresyDodatkowychMiejscWykonywaniaDzialalnosci2
 ,AdresDoDoreczen
 ,STATUS
INTO
  #ceidg_ak_id
FROM
  #CEIDG
WHERE
  sp_id <> '';

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