ورود

View Full Version : سوال: Trigger



dr_csharp
پنج شنبه 28 شهریور 1387, 09:11 صبح
سلام
آیا میشه Trigger بین دوتا Table از دوDatabase مختلف ( هردو روی یک instance از SQL قرار دارن ) تعریف بشه ؟چطور؟

AminSobati
پنج شنبه 28 شهریور 1387, 18:40 عصر
سلام دوست عزیزم،
منظورتون اینه که یک Trigger به دیتابیس دیگه هم دسترسی پیدا کنه؟ لطفا واضح کنید

dr_csharp
شنبه 30 شهریور 1387, 14:07 عصر
سلام دوست عزیزم،
منظورتون اینه که یک Trigger به دیتابیس دیگه هم دسترسی پیدا کنه؟ لطفا واضح کنید
مثلا ما دوتا بانک بنام A و B داریم.میخوام یه Trigger رویکی از Table های بانک A تعریف کنم که درصورت وجود شرایطی ،یکسری عملیات روی جدولی از بانک B انجام بده !

کم حوصله
شنبه 30 شهریور 1387, 15:41 عصر
سلام


CREATE TRIGGER JoinDataBase ON dbo.Tb1
FOR Insert
AS
Insert Into DbName.dbo.Tablename (F1,F2)
Select F1, F2 From Inserted

این تریگر را روی جدول دیتابیس A می گذاری زمانی که رکوردی در جدول دیتابیس A وارد شود رکوردی در جدول دیتابیس B ایجاد می کند

برای دسترسی از یک دیتابیس به دیتابیس دیگر کافی است این سطوح را رعایت کنیم
نام جدول.نام یوزر.نام دیتابیس
حال اگر دیتابیس بر روی سروری دیگر باشد بعد از برقراری لینک سرور بین دوسرور اینگونه برقراری ارتباط می شود
نام جدول.نام یوزر.نام دیتابیس.نام سرور


Select * From TB1 Inner Join A.dbo.TB2 ON TB1.F1 = A.dbo.Tb2.F1

dr_csharp
یک شنبه 31 شهریور 1387, 08:57 صبح
حلا چطور میتونیم(تو همون Trigger) مثلا همزمان با Insert تو جدول A دومین فیلد از رکورد Insert شده رو بگیریم و بعد همون رو در B بریزیم ؟

کم حوصله
یک شنبه 31 شهریور 1387, 10:58 صبح
همانطور که میدانید ما در تریگرها جداولی با نام Inserted - deleted داریم که در صورتی که ما رکرودی به جدول اضافه کنیم یا حذف کنیم مقدار آن رکورد در این جداول خاص که دقیقا ساختار جدول اصلی را دارند می باشد
حال اگر گروه رکوردهای در حال فعالیت بیش از یک مورد باشد جدول های شما چند رکوردی بوده و می توانید مثل یک جدول عادی با آنها رفتارکنید و مقادیر آن را بخوانید

babak2000
دوشنبه 08 مهر 1387, 10:47 صبح
با سلام

من هم همین مشکل دوستمون را دارم با یه تفاوت :

برای Insert داخل جدول شماره 1 ، یک تریگر نوشتم که دو تا از فیلدهای ID و کد ملی را بگیرد

و در جدول شماره 2 یک ردیف اضافه کرده و این دو تا فیلد را اافه نماید ولی خطایی 120 را میدهد

می گویید نام فیلدها در هر دو جدول باید یکی باشد !

ممنون


CREATE TRIGGER [insertKod] ON dbo.FileFormation
FOR INSERT
AS


declare @NationalCodeFile nvarchar(15)
declare @IdFile numeric(9)

select @IdFile=ID_FileFormation from inserted
select @NationalCodeFile=NationalCode from inserted

insert into Payesh_1(IdPayesh1,NationalCode)

select IdPayesh1=ID_FileFormation from inserted
select NationalCode=NationalCode from inserted

البته به اینصورت هم نوشتم بازهم نشد :
select IdPayesh1=@IdFile from inserted
select NationalCode=@NationalCodeFile from inserted

کم حوصله
دوشنبه 08 مهر 1387, 11:30 صبح
سلام
من که نفهمیدم چکار می کنی ولی اینو تست کن


CREATE TRIGGER [insertKod] ON dbo.FileFormation
FOR INSERT
AS
insert into Payesh_1(IdPayesh1,NationalCode)
select ID_FileFormation, NationalCode from inserted


ضمنا این را توجه داشته باشید که همیشه جداول تریگر (Inserted OR Deleted) تک رکوردی نیستند و اگر شما بصورت دسته ای اطلاعات را ذخیره کنید چند رکوردی میشوند

babak2000
دوشنبه 08 مهر 1387, 11:46 صبح
مرسی دوست عزیز

ولی من میخواهم ID_FileFormation, NationalCode وارد شده به جدول ، داخل جدول Payesh_1 و بترتیب داخل فیلد های IdPayesh1,NationalCode قرار بگیرد

آیا دستور Select انتهایی ، مقدار فیلد ها را داخل جدول دوم می ریزد

sheitoonbala
دوشنبه 08 مهر 1387, 14:09 عصر
سلام . این کد رو تست کن


CREATETRIGGER [insertKod] ON dbo.FileFormation
FOR INSERT
AS
declare @NationalCodeFile nvarchar(15)
declare @IdFile numeric(9)
select @IdFile=ID_FileFormation from inserted
select @NationalCodeFile=NationalCode from inserted
insert into Payesh_1(IdPayesh1,NationalCode)values ( @IdFile ,@NationalCodeFile)


موفق باشید ....

کم حوصله
سه شنبه 09 مهر 1387, 12:56 عصر
سلام . این کد رو تست کن


CREATETRIGGER [insertKod] ON dbo.FileFormation
FOR INSERT
AS
declare @NationalCodeFile nvarchar(15)
declare @IdFile numeric(9)
select @IdFile=ID_FileFormation from inserted
select @NationalCodeFile=NationalCode from inserted
insert into Payesh_1(IdPayesh1,NationalCode)values ( @IdFile ,@NationalCodeFile)


موفق باشید ....


سلام
دوست عزیز در تریگرها ما دو جدول با نام های" Inserted " و " Deleted " داریم که ساختار این جداول با ساختار همان جدولی که برروی آن تریگر ساخته می شود یکی است
به طور مثال اگر در نظر بگیرید ما جدول Student داشته باشیم که دارای 3 فیلد StuId , FName, LName باشد و یک جدول Course داشته باشیم که دارای فیلدهای CurId, CurName باشد زمانی که ما بر روی جدول دانشجو تریگر می زنیم فیلدهای جدول Inserted Or Deleted شامل StuId , FName, LName می باشد و زمانی که بر روی جدول درسها تریگر می زنیم آن دو جدول شامل فیلدهای CurId, CurName می شوند پس ساختار این دو جدول عینا همانند جدول اصلی که بر روی آن تریگر ساخته شده می باشد
و اما دیتای درون این دو جدول شامل Inserted تمام رکورد هایی که به جدول اصلی شما در حال اضافه شدن است و در Deleted تمام رکوردهایی که در حال حذف شدن از جدول اصلی شما می باشد
چنانچه شما یک رکورد را ویرایش کند (اضافه یا حذف) جدول های مذکور دارای یک رکورد هستند ولی اگر شما بصورت دسته ای این کار را انجام دهید جدول ها شامل N رکورد خواهند شد

اینها ار گفتم که دیگه درون تریگر متغییر نگیرید و دیتا را بخواهید درون آنها بریزید چون اگر چند رکوردی بشه تریگر خطا می دهد

کم حوصله
سه شنبه 09 مهر 1387, 13:03 عصر
مرسی دوست عزیز

ولی من میخواهم ID_FileFormation, NationalCode وارد شده به جدول ، داخل جدول Payesh_1 و بترتیب داخل فیلد های IdPayesh1,NationalCode قرار بگیرد

آیا دستور Select انتهایی ، مقدار فیلد ها را داخل جدول دوم می ریزد

فکر کنم یک مشکل دیگه ای هم که شما دارید در مورد دستور Insert می باشد

در این دستور ما به دو فرمت می توانیم کار کنیم
1 - زمانی که می خواهیم فقط یک رکرود به جدول اضافه کنیم


Insert Into Tablename (Filed1,Filed2, ...) Values (Value1, Value2, ...)


2 - زمانی که بخواهیم بیش از یک رکورد همزمان در جدول درج کنیم ; که اینگونه موارد در زمانی رخ می دهد که ما بخواهیم یکسری از اطلاعات موجود در یک جدول را به جدولی دیگر منتقل کنیم



Insert Into DisTablename (Filed1,Filed2, ...)
Select Filed1, Filed2 ,... From SouTableName

که در این حالت تعداد فیلدهای جدول مبدا و جدول مقصد هم از نظر تعداد و هم از نظر نوع فیلد باید یکسان باشند