Tsql 合并-如果匹配,则不执行任何操作
当条件不匹配时,我需要编写一个MERGE语句来插入数据,当条件匹配时,我希望查询什么都不做,但我必须包含这个条件,因为我迫切需要将两个条件中的源数据捕获到输出表中 这是我的密码:Tsql 合并-如果匹配,则不执行任何操作,tsql,Tsql,当条件不匹配时,我需要编写一个MERGE语句来插入数据,当条件匹配时,我希望查询什么都不做,但我必须包含这个条件,因为我迫切需要将两个条件中的源数据捕获到输出表中 这是我的密码: MERGE dm_data_bps.dbo.akcja AS target USING ( SELECT * FROM #CEIDG WHERE isnull(sp_i
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;
我如何才能实现我的目标?我不确定我是否会为MERGE语句带来的所有开销而烦恼。看 您可以通过显式事务获得所需的一切
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;
相反,我很确定您可以使用目标表的任何列的自身值来更新它:update set target.x=target.x…旁白:关于isnullsp_id,您正在创建一个不必要的性能拖动。看看这里@Eric非常感谢,很显然,只写sp_id就足够了,返回的行数也是一样的,但由于使用了索引查找,性能要好得多。@Zohar,你说得完全正确,它是这样工作的。我认为有一种方法可以避免执行任何操作,从而不会影响性能。但是,请注意,update语句仍将被执行-从性能方面来说,可能有更好的方法来获得您所需要的。