2017-02-27 8 views
0

私はトリガを作成するために、次のコード(それはデータを挿入)を持つSQL Serverの2014を使用しています:まだそれらを更新し、他に存在しない場合にのみ、私は値を挿入するにはどうすればよいトリガーステートメントを作成してSQL Serverテーブルに値を挿入する方法は、まだ存在しない場合にのみ作成します。

CREATE TRIGGER [dbo].[INSERT_TR_LAB_TESTS_RESULTS] 
ON [dbo].[TRANSACTIONS_TBL] 
AFTER INSERT, UPDATE, DELETE 
AS 
    DECLARE @SERVICE_CODE INT 
    DECLARE @INVOICE_NO INT 
    DECLARE @PATIENT_TYPE_ID INT 
    DECLARE @INSURANCE_COMPANY_ID INT 
    DECLARE @INSURANCE_CARD_NO VARCHAR(50) 
    DECLARE @SPONSER_TYPE_ID INT 
    DECLARE @QTY_OF_SERVICES INT 
    DECLARE @PATIENT_NAME_ID INT 
    DECLARE @LAB_TEST_CATEGORY_ID INT 
    DECLARE @LAB_TEST_NAME nvarchar(100) 
    DECLARE @LAB_TEST_RESULT VARCHAR(100) 
    DECLARE @RESULT_REFERENCE_VALUE nvarchar(70) 
    DECLARE @TEST_UNIT nvarchar(50) 

    INSERT INTO LAB_TESTS_RESULTS (SERVICE_CODE, INVOICE_NO, PATIENT_TYPE_ID, 
            INSURANCE_COMPANY_ID, INSURANCE_CARD_NO, 
            SPONSER_TYPE_ID, QTY_OF_SERVICES, PATIENT_NAME_ID, 
            LAB_TEST_CATEGORY_ID, LAB_TEST_NAME, 
            LAB_TEST_RESULT, RESULT_REFERENCE_VALUE, TEST_UNIT) 
     SELECT 
      t1.SERVICE_CODE, t1.INVOICE_NO, t1.PATIENT_TYPE_ID, 
      t1.INSURANCE_COMPANY_ID, t1.INSURANCE_CARD_NO, 
      t1.SPONSER_TYPE_ID, t1.QTY_OF_SERVICES, t1.PATIENT_NAME_ID, 
      t2.LAB_TEST_CATEGORY_ID, t2.LAB_TEST_NAME, 
      t2.LAB_TEST_RESULT, t2.RESULT_REFERENCE_VALUE, t2.TEST_UNIT 
     FROM  
      TRANSACTIONS_TBL t1 
     CROSS JOIN 
      LAB_TESTS_NAMES_TBL t2 
     WHERE 
      t1.SERVICE_CODE = t2.SERVICE_CODE 
GO 

を?あなたのテーブルのキーはSERVICE_CODEであると仮定すると、

+1

あなたのテーブルのキーが何であるか、それは ' SERVICE_CODE'? –

+0

あなたのトリガー内 'Inserted'と' Deleted'疑似テーブルを見てする必要がある - それらは、行が挿入、削除または更新されているが含まれています。これらの行に基づいて、他の行を挿入したり更新したりすることはできますが、簡単にするために**それぞれの操作のための3つの別々の**トリガーを付けることをお勧めします( 'FOR INSERT'のみ'FOR UPDATE'は既存の行のみを更新し、' FOR DELETE'は既存行を削除します)。 –

答えて

0

、次のアプローチに従う: -

IF EXISTS (SELECT * FROM LAB_TESTS_RESULTS WHERE SERVICE_CODE = @SERVICE_CODE) 
    BEGIN 
      -- Put your update statement here 
    End 
Else 
    BEGIN 
      -- Put your Insert statement here 
    End 

完全なコード: -

CREATE TRIGGER [dbo].[INSERT_TR_LAB_TESTS_RESULTS] 
ON [dbo].[TRANSACTIONS_TBL] 
AFTER INSERT, UPDATE, DELETE 
AS 
    DECLARE @SERVICE_CODE INT 
    DECLARE @INVOICE_NO INT 
    DECLARE @PATIENT_TYPE_ID INT 
    DECLARE @INSURANCE_COMPANY_ID INT 
    DECLARE @INSURANCE_CARD_NO VARCHAR(50) 
    DECLARE @SPONSER_TYPE_ID INT 
    DECLARE @QTY_OF_SERVICES INT 
    DECLARE @PATIENT_NAME_ID INT 
    DECLARE @LAB_TEST_CATEGORY_ID INT 
    DECLARE @LAB_TEST_NAME nvarchar(100) 
    DECLARE @LAB_TEST_RESULT VARCHAR(100) 
    DECLARE @RESULT_REFERENCE_VALUE nvarchar(70) 
    DECLARE @TEST_UNIT nvarchar(50) 

    IF EXISTS (SELECT * FROM LAB_TESTS_RESULTS WHERE SERVICE_CODE = @SERVICE_CODE) 
    BEGIN 
     Update LAB_TESTS_RESULTS 
     Set 
      INVOICE_NO = @INVOICE_NO, 
      PATIENT_TYPE_ID = @PATIENT_TYPE_ID , 
      INSURANCE_COMPANY_ID = @INSURANCE_COMPANY_ID, 
      INSURANCE_CARD_NO = @INSURANCE_CARD_NO, 
      SPONSER_TYPE_ID = @SPONSER_TYPE_ID, 
      QTY_OF_SERVICES = @QTY_OF_SERVICES, 
      PATIENT_NAME_ID = @PATIENT_NAME_ID, 
      LAB_TEST_CATEGORY_ID = @LAB_TEST_CATEGORY_ID, 
      LAB_TEST_NAME = @LAB_TEST_NAME, 
      LAB_TEST_RESULT = @LAB_TEST_RESULT, 
      RESULT_REFERENCE_VALUE = @RESULT_REFERENCE_VALUE, 
      TEST_UNIT = @TEST_UNIT 
     Where 
      SERVICE_CODE = @SERVICE_CODE 
    END 
    ELSE 
    BEGIN 
     INSERT INTO LAB_TESTS_RESULTS (SERVICE_CODE, INVOICE_NO, PATIENT_TYPE_ID, INSURANCE_COMPANY_ID, INSURANCE_CARD_NO, SPONSER_TYPE_ID, QTY_OF_SERVICES, PATIENT_NAME_ID, LAB_TEST_CATEGORY_ID, LAB_TEST_NAME, LAB_TEST_RESULT, RESULT_REFERENCE_VALUE, TEST_UNIT) 
     SELECT 
      t1.SERVICE_CODE, t1.INVOICE_NO, t1.PATIENT_TYPE_ID, 
      t1.INSURANCE_COMPANY_ID, t1.INSURANCE_CARD_NO, 
      t1.SPONSER_TYPE_ID, t1.QTY_OF_SERVICES, t1.PATIENT_NAME_ID, 
      t2.LAB_TEST_CATEGORY_ID, t2.LAB_TEST_NAME, 
      t2.LAB_TEST_RESULT, t2.RESULT_REFERENCE_VALUE, t2.TEST_UNIT 
     FROM  
      TRANSACTIONS_TBL t1 
     CROSS JOIN 
      LAB_TESTS_NAMES_TBL t2 
     WHERE 
      t1.SERVICE_CODE = t2.SERVICE_CODE 
    END 

GO 
+0

は、あなたの答え のためにあなたのアーメドAbdelqaderをありがとうしかし、問題は、テーブル にトリガーをTRANSACTIONS_TBLする新しい挿入した後でLAB_TESTS_RESULTSテーブルに古いレコード(Aレコードを再挿入)を使用して新しいレコードを挿入 –

関連する問題