PDA

View Full Version : سوال: سفارشي كردن خطاي مربوط به ورود داده تكراري



amirzazadeh
سه شنبه 07 مهر 1388, 09:12 صبح
سلام دوستان
ميخواستم بدونم چه جوري ميتونم با استفاده از يك تريگر يا sp به جاي خطاي مربوط به ورود داده تكراري در فيلد pk (خطاي شماره 2627) پيام فارسي جايگزين كنم .(من از اس كيو ال 2000 استفاه ميكنم).
..............................................
ممنون به خاطر پاسخ هاي ارزنده شما

محمد سلیم آبادی
سه شنبه 07 مهر 1388, 10:42 صبح
سلام،
به نکته ی خوبی اشاره کردین. یکی از مزیت های Trigger ها نسبت به Constraint ها این است که شما می توانید پیغام های مناسب و دلخواه خودتان را ارسال کنید.
با کمک دستور Raiserror می توانیم یک Exception تولید کنیم.
به مثال زیر توجه کنید:


Create Trigger Trg_I
On Your_Table
Insetead Of Insert, Update
AS
IF Exists(select * from Your_table where PK=(select PK from inserted))
Raiserror ('Custom Message', 16, 1)
Else Insert Into Your_table Select * FROM Inserted

یا اگر می خواهین از SP استفاده کنین:


Create Proceduer Proc1
@PK int
AS
If exists (select * from Your_Table where PK=@PK)
raiserro( 'Custom Error', 16, 1)
Else Insert into Your_Table Values(@PK,...)

amirzazadeh
چهارشنبه 08 مهر 1388, 10:14 صبح
سلام،
به نکته ی خوبی اشاره کردین. یکی از مزیت های Trigger ها نسبت به Constraint ها این است که شما می توانید پیغام های مناسب و دلخواه خودتان را ارسال کنید.
با کمک دستور Raiserror می توانیم یک Exception تولید کنیم.
به مثال زیر توجه کنید:


Create Trigger Trg_I
On Your_Table
Insetead Of Insert, Update
AS
IF Exists(select * from Your_table where PK=(select PK from inserted))
Raiserror ('Custom Message', 16, 1)
Else Insert Into Your_table Select * FROM Inserted
یا اگر می خواهین از SP استفاده کنین:


Create Proceduer Proc1
@PK int
AS
If exists (select * from Your_Table where PK=@PK)
raiserro( 'Custom Error', 16, 1)
Else Insert into Your_Table Values(@PK,...)

سلام
با تشكر از پاسخ جامع جناب msalim در هنگام استفاده از تريگر ارائه شده با توجه به اينكه يكي از فيلد هاي جول من از نوع identity (اتونامبر) مي باشد در صورت تكراري نبودن فيلد pk كد Else Insert Into Your_table Select * FROM Inserted قادر به درج فيلد مذكور در جدول نميباشد .دوستان چه راه حلي براي رفع اين مشكل پيشنهاد ميكنند.
...........................
پيشاپيش ممنون

محمد سلیم آبادی
چهارشنبه 08 مهر 1388, 10:55 صبح
سلام،
احتمالا برای این است که ما نمی توانیم مستقیما مقدایر Identity را در جدول درج کنیم.
قبل از دستور Insert از دستور Set Identity_Insert Your_table ON استفاده کنید.

یا می توانین لیست تمام ستونهایتان را به غیر از ستون Identity در هنگام درج ذکر کنید.