2017-02-27 4 views
0

나는 SQL 서버 2014을 사용하고 I (이 데이터를 삽입) 트리거를 만들려면 다음 코드가 있습니다트리거 문을 만들어 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' 의사 테이블을 살펴볼 필요가 있습니다. 이러한 행을 기반으로 다른 행을 삽입 및/또는 업데이트 할 수는 있지만 간단히하기 위해 각 작업 유형별로 하나씩 ** 별도의 세 가지 ** 트리거를 사용하는 것이 좋습니다 ('FOR INSERT' - only '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

Ahmed Abdelqader에게 대답 해 주셔서 감사합니다. TRANSACTIONS_TBL 테이블에 새로 삽입 한 후 문제가 발생했습니다. 트리거가 이전 레코드가있는 새 레코드를 삽입 (레코드 다시 삽입)하여 LAB_TESTS_RESULTS 테이블에 삽입합니다. –

관련 문제