الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشكلة في Trigger

بدأه ورق خسرانه في 22 يونيو 2013 · 8 رد · 1,004 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

 السسلام عليكم ورحمة الله وبركاته

 اخواني الاعزاء لدي جدول التسجيل   واريد عندما يقوم الشخص بعملية  التسجيل يتم التحقق من الاسم المدخل عبر Trigger هل الاسم موجود من قبل او لا اذا كان موجود من قبل يطبع له رسالة خطاء ان الاسم موجود من قبل يرجى التغيير 

قمت بانشاء الـ Trigger  ولكن  لم استطع ان اقوم بعملة بالشكل الصحيح 

وهذه هو الكود

ALTER TRIGGER [dbo].[cheacknames]

ON [dbo].[RegisterCount]
instead of  INSERT
AS
declare @name varchar(250);
select @name=userName from inserted ;
 if exists(select @name from RegisterCount)
 begin
    	rollback transaction;
  end

 ارجو التعديل على الكود 

#2

لماذا لايحدد ك unique ؟

1
(map share people)

فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader

#3

 وضح لي قصدك اخي العزيز  لم  افهم ماذا تقصد هل تقصد لماذا لا اعمل الحقل unique؟ لو كنت تقصد هذه الشي انا اعرف انني استطيع عملة يونيك ولين يتكرر  ولكن اريد ان اقوم  بالتاكد من عدم تكررا الاسم عن طريق Trigger  واريد التعديل على الـ Trigger  الذي قمت بانشائه ولك جزيل الشكر

تم تعديل هذه المشاركة بواسطة ورق خسرانه في 22 يونيو 2013 في 04:37

#4

UP

#5

السلام عليكم

 

الاصح استخدام Unique Constraint  كما ذكر الاخ احمد .

على كل حال ارى ان الخطأ عندك في جملة الاستعلام والتي يجب ان تكون كمايلي

select * from RegisterCount where username =@name

ويجب ايضا عمل خطأ عن طريق RaiseError 

 

فيصبح عندك

ALTER TRIGGER [dbo].[cheacknames]

ON [dbo].[RegisterCount]
instead of  INSERT
AS
declare @name varchar(250);
select @name=userName from inserted ;
if EXISTS(select * from RegisterCount  where username =@name)
      
BEGIN
   RAISERROR ('Duplicate User Name', 16, 1)
ROLLBACK TRANSACTION
END
1
#6
TareqVB كتب:

 

السلام عليكم

 

الاصح استخدام Unique Constraint  كما ذكر الاخ احمد .

على كل حال ارى ان الخطأ عندك في جملة الاستعلام والتي يجب ان تكون كمايلي

select * from RegisterCount where username =@name

ويجب ايضا عمل خطأ عن طريق RaiseError 

 

فيصبح عندك

ALTER TRIGGER [dbo].[cheacknames]

ON [dbo].[RegisterCount]
instead of  INSERT
AS
declare @name varchar(250);
select @name=userName from inserted ;
if EXISTS(select * from RegisterCount  where username =@name)
      
BEGIN
   RAISERROR ('Duplicate User Name', 16, 1)
ROLLBACK TRANSACTION
END

مشكور اخي الغالي على الرد .. ولكن يوجد مشكلة اخي .الـ Trigger    لايسمح لي بـ اضافة اي سطر جديد .. سوا اني ادخلت اسم موجود مسبقاً او غير ذالك .. من المفترض ان الـ Trigger   يشتغل فقط عندما يقوم المستخدم باضافة اسم موجود في قاعدة البيانات ؟

#7

السلام عليكم لماذا لاتستخدمين نفس الستورد بروسيجر للتحقق وللادخال بدال ال Trigger

 لايصح استخدام ال triiger  هنا

 

جربي الكود التالي

Create procedure Testname
(
@name varchar(50)
)
as
Declare @Chakename int
set @Chakename=(select COUNT(*) from TableName where Name=@name);
if @Chakename >=1
RAISERROR ('Duplicate User Name', 16, 1)
else
begin try

Insert into TableTrigger(Name) VALUES(@name)
PRINT 'INSERT oK....'
end try
 begin catch
 RAISERROR ('Error plz Try agin later', 17, 1)
 Rollback tran
end catch

تم تعديل هذه المشاركة بواسطة عمر المستشار في 25 يونيو 2013 في 21:58

1
1vAO2-d3nY_335990295.gif

يارب ساعدني كلما اتقدم خطوة اجد نفسي متأخر في خطوات

154047116.gif
#8
عمر المستشار كتب:

 

السلام عليكم لماذا لاتستخدمين نفس الستورد بروسيجر للتحقق وللادخال بدال ال Trigger

 لايصح استخدام ال triiger  هنا

 

جربي الكود التالي

Create procedure Testname
(
@name varchar(50)
)
as
Declare @Chakename int
set @Chakename=(select COUNT(*) from TableName where Name=@name);
if @Chakename >=1
RAISERROR ('Duplicate User Name', 16, 1)
else
begin try

Insert into TableTrigger(Name) VALUES(@name)
PRINT 'INSERT oK....'
end try
 begin catch
 RAISERROR ('Error plz Try agin later', 17, 1)
 Rollback tran
end catch

--------- 

مشكور اخي .. بس انا اريد باستخدام Triggers 

#9

UP

مواضيع مشابهة