9
我在我的查询中使用合并,我做条款时INSERT不当然,然后我想获得插入的行身份,并作出另一个插入一些其他表。现在查询是:SQL服务器与多个插入时合并,当不匹配
ALTER PROCEDURE [dbo].[BulkMergeOffers]
@data ImportDataType READONLY
AS
SET NOCOUNT ON;
DECLARE @cid int = 0
MERGE dbo.oferta AS target
USING @data AS source
ON (target.nr_oferty = source.nr_oferty)
WHEN NOT MATCHED THEN
INSERT (nr_oferty,rynek,typ_transakcji, typ_nieruchomosci,cena,powierzchnia, rok_budowy, wojewodztwo, miasto, dzielnica, ulica, opis, wspolrzedne, film, zrodlo, KontaktStore, data, forma_wlasnosci, stan_techniczny, liczba_pokoi, liczba_peter, pietro, material, kuchnia, pow_dzialki, typ_dzialki, woda,gaz, prad,sila, przeznaczenie,lokal_dane)
VALUES (source.nr_oferty,source.rynek,source.typ_transakcji, source.typ_nieruchomosci,source.cena,source.powierzchnia, source.rok_budowy, source.wojewodztwo, miasto, source.dzielnica, source.ulica, source.opis, source.wspolrzedne, source.film, source.zrodlo, source.KontaktStore, source.data, source.forma_wlasnosci, source.stan_techniczny, source.liczba_pokoi, source.liczba_peter, source.pietro, source.material, source.kuchnia, source.pow_dzialki, source.typ_dzialki, source.woda,source.gaz, source.prad,source.sila, source.przeznaczenie,source.lokal_dane);
所以你看,我需要根据源数据中插入一些值到目标表,然后我需要插入的身份,并将其插入到另一个表中还可以根据一些源数据,所以这样的事情,就在第一次插入后:
SET @cid = SCOPE_IDENTITY();
if source.photo is not null
begin
insert into dbo.photos(offerID, file) values (@cid, source.photo);
end
但我不能组装起来,一有源没有接入没有更多的,还if语句显示错误:
“多部分标识符 source.photo无法绑定“
但它在那里。为了清楚起见,ImportDataType是一个表值参数。
请帮助
我使用WHEN也符合更新,只是剥离它澄清样品,是我不好。但你的样本很有意思,我会尽量分析它并根据我的需要进行调整,这是一个很好的参考。 – Programista 2010-10-06 12:52:46
我真的是一个很好的建议,thx,我设法让它工作。 – Programista 2010-10-06 18:05:24
请注意,如果您需要从源记录输出数据,MERGE仍然有用。 'MERGE'' OUTPUT'语句可以返回插入的数据和源数据,而'INSERT'语句只能从插入的行返回值。 – 2013-10-06 17:21:55