我有以下SQL觸發器:只能創建新行,如果一個特定的列被更新
ALTER TRIGGER [dbo].[DIENSTLEISTUNG_Update]
ON [dbo].[DIENSTLEISTUNG]
INSTEAD OF UPDATE
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO [DIENSTLEISTUNG]
(DESCRIPTION, QUANTITY,
PRICE, AZ_MO, AZ_DI,AZ_MI,AZ_DO,AZ_FR,
AZ_SA,AZ_SO,DIENSTLEISTUNGSART_ID,
UPDATE_USER, UPDATE_DATE,
PERMISSIONS, KONTRAKTPOSITION,ITEMNUMBER,
PRIORITY, VALID)
SELECT DESCRIPTION, QUANTITY, PRICE AZ_MO, AZ_DI,AZ_MI,AZ_DO,AZ_FR,
AZ_SA,AZ_SO,SERVICETYPE_ID, UPDATE_USER,GETDATE(),
PERMISSIONS, KONTRAKTPOSITION,ITEMNUMBER, PRIORITY, 'Y',VALID
FROM INSERTED
UPDATE SERVICE
SET VALID = 'N'
FROM SERVICE
INNER JOIN INSERTED ON INSERTED.ID = SERVICE.ID
SET NOCOUNT OFF;
END
的觸發拷貝整行一個新的ID,如果原始行中的變化情況。 目前爲止這麼好。如果PRICE
或DESCRIPTION
已更新,我希望觸發器僅創建一個新行。如果我在PRIORITY
或ITEMNUMER
或其他列上執行更新,則觸發器應只更新該行,但不會創建新行。
我該怎麼做?
感謝您的代碼。如果我嘗試在瀏覽器中出現錯誤:您試圖更新的Datarow不再存在於數據源中,或者數據行不在可見頁面中。請刷新網格。 – Paks 2012-07-27 07:56:50
@Paks這不是sql-server的錯誤,而是客戶端的錯誤。也許你試着在觸發器執行後更新表格?嘗試從ssms中更新行,以確保觸發器正常工作。 – 2012-07-27 08:15:11
我可以更新價格和描述。到目前爲止它工作正常。觸發器使用新的ID和新的價格或描述複製整個行。但我不能更新優先級或其他colmuns。 – Paks 2012-07-27 08:29:32