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'? –
您需要查看觸發器內的「插入」和「已刪除」僞表 - 這些僞表包含要插入,刪除或更新的行。基於這些行,你可以插入和/或更新其他行......但爲了簡單起見,我真的建議有**三個單獨的**觸發器 - 每種類型的操作('FOR INSERT'插入新行;'FOR UPDATE'只更新現有行,'FOR DELETE'只刪除現有行。 –