2017-06-01 21 views
0

テーブルに値を挿入する必要がありますが、これらの値が存在する場合は、スクリプトに何も挿入しないようにします。私はかなりそれを解決したが、私は最後に私の挿入声明で立ち往生している。値が存在しない場合のSQL挿入

DECLARE @billableitemID int; 
set @billableitemid = (select billableitemID from dbo.treatment where 
@billableitemid=treatment.id) 
set @billableitemID = 256 



CREATE TABLE #MembershipBenefitItem 
    (BenefitID int , 
     BillableItemTypeID int , 
     BillableItemID int 
    ) 

INSERT INTO #MembershipBenefitItem 
    (BenefitID , 
     BillableItemTypeID , 
     BillableItemID 
    ) 

VALUES (23450,1,@billableitemid), 
(57256,1,@billableitemid) 

select m.* from #MembershipBenefitItem AS M 
left join membershipbenefititem AS M1 on m.billableitemid= m1.billableitemid 
and m.billableitemtypeid= m1.billableitemtypeid 
and m.benefitid= m1.benefitID 
and [email protected] and M1.billableitemtypeID=1 and 
M1.benefitID IN(23450,57256) 
where M1.ID is null 

INSERT INTO MembershipBenefitItem 
    (BenefitID, 
     BillableItemTypeID, 
     BillableItemID 
    ) 

select m.BenefitID, m.BillableItemTypeID, m.BillableItemID from 
#MembershipBenefitItem AS M 
left join membershipbenefititem AS M1 on m.billableitemid= m1.billableitemid 
and m.billableitemtypeid= m1.billableitemtypeid 
and m.benefitid= m1.benefitID 
and [email protected] and M1.billableitemtypeID=1 and 
M1.benefitID IN(23450,57256) 
where M1.ID is null 



DROP TABLE #MembershipBenefitItem 
+0

MERGE文になるようなことを行う別の方法:

https://docs.microsoft.com/en-us/sql/t-sql/statements/merge-transact-sql

それは次のようになります。ちょっとした考え。通常はこれが使用されていますが、存在する場合は更新されます。その他の場合は –

+0

を挿入します。 –

+1

'Where ...そして存在しません(キーのcoorlatedサブクエリ)' – xQbert

答えて

1

これは、Mergeステートメントを使用するのが良いケースのようです。

MERGE MembershipBenefitItem AS trg 
USING #MembershipBenefitItem AS src 
ON src.BillableItemID = trg.BillableItemID --and other join conditions 
WHEN NOT MATCHED BY TARGET THEN 
INSERT (col1, col2, col3) -- this will be inserted into trg table 
VALUES (src.val1, src.val2, src.val3) 
関連する問題