ورود

View Full Version : AFTER INSERT TRIGGER FAILURE



sknsphr
یک شنبه 17 تیر 1386, 11:01 صبح
سلام
من یه تریگر دارم.

CREATE TRIGGER trgInsertPRT_T ON PRT_T FOR INSERT AS
INSERT INTO tblNComponent(PRT_CODE) SELECT PRT_CODE FROM inserted
GO
می‌خوام وقتی این تریگر با موفقیت اجرا نشه، تاثیری تو INSERT که باعث شده این تریگر اجرا باشه، نداشته باشه. مجبور شدم تریگرم رو اینطور تغییر بدم:


CREATE TRIGGER trgInsertPRT_T ON PRT_T AFTER INSERT AS
IF NOT EXISTS (SELECT PRT_CODE FROM tblNComponent
WHERE PRT_CODE=(SELECT PRT_CODE FROM inserted))
INSERT tblNComponent(PRT_CODE) SELECT PRT_CODE FROM inserted
GO
راه دیگه‌ای نداره که من از IF NOT EXISTS استفاده نکنم؟

AminSobati
یک شنبه 17 تیر 1386, 23:21 عصر
دوست عزیزم در نسخه 2005 میتونین از TRY CATCH در T-SQL استفاده کنین. در 2000 متاسفانه باید وجود کد تکراری رو چک کنین چون در هر حال زمانی که Error رخ بده، این خطا به سمت Client برمیگرده.

sknsphr
دوشنبه 18 تیر 1386, 12:35 عصر
ممنون اینطوری حل شد:

CREATE TRIGGER [dbo].[trgInsertPRT_T] ON [dbo].[PRT_T] FOR INSERT AS
SET XACT_ABORT OFF
BEGIN TRY
INSERT INTO tblNComponent(PRT_CODE) SELECT PRT_CODE FROM inserted
END TRY

BEGIN CATCH
END CATCH

اینطوری هم می‌شه:


INSERT INTO tblNComponent(PRT_CODE) SELECT I.PRT_CODE FROM inserted I
LEFT OUTER JOIN tblNComponent T ON I.PRT_CODE=T.PRT_CODE
WHERE T.PRT_CODE IS NULL