PDA

View Full Version : تریگر و اپدیت یک رکورد



sara_t
سه شنبه 28 شهریور 1391, 10:20 صبح
سلام دوستان
من یه تریگر نوشتم که وقتی در یک جدول یک رکورد آپدیت میشه اونو در یک جدول دیگه بنویسه.
اسم جدول اصلیم users
اسم جدول بعد از تریگر triguser
دستورات زیر اینکار رو برای من انجام میده اما هر بار که یک رکورد آپدیت میشه کل محتویات جدول یوزر در جدول triggeruser میشینه.
چطور میتونم در دستوراتم کنترل کنم که فقط رکورد اپدیت شده رو انتقال بده نه کل جدول رو؟


ALTER TRIGGER [dbo].[EditPass]
ON [dbo].[USERS]
AFTER UPDATE
AS
BEGIN

INSERT INTO dbo.triggeruser (name,[login],pass)
SELECT NAME,[LOGIN],PASS FROM dbo.USERS
END

Felony
سه شنبه 28 شهریور 1391, 11:57 صبح
با اون Select ی که نوشتی چیزی جز درج کل جدول انتظار داری ؟!

باید از جدول Inserted استفاده کنی تا رکوردی که در جریان این تریگر تغییر پیدا کرده رو به دست بیاری ، مثلا :

CREATE TRIGGER Test
on Table_1
after update
as
Insert INTo table_2 select * from Inserted

sara_t
سه شنبه 28 شهریور 1391, 12:51 عصر
نه انتظار نداشتم اما چطور باید سوالم رو مطرح میکردم؟(بنظر خودم!)
بسیار ممنون از پاسختون.

من از جدول inserted استفاده کردم. و برای یکی از جدولهام درست جواب میده اما برای دیگری جواب نمیده یعنی هیچی در جدول مربوطه اش نمیشینه، میشه لطف کنید بگید چرا؟

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

ALTER TRIGGER [dbo].[EditPass]
ON [dbo].[USERS]
AFTER UPDATE
AS
BEGIN

INSERT INTO dbo.triggeruser (name,[login],pass,dates)

SELECT i.NAME, i.[LOGIN], i.PASS,GETDATE()
FROM INSERTED i
END

دستور جدول دوم:

ALTER TRIGGER [dbo].[editkharid]
ON [dbo].[kFactor_List_Saved]
AFTER UPDATE
AS
BEGIN
INSERT INTO dbo.trigerkfactorsaved ([Good-ID],Description_ID,Good_Number,JAYEZEH,kFactor_NO,Des criptionshamsi )

SELECT j.[Good-ID],j.Description_ID,j.Good_Number,j.JAYEZEH,j.kFacto r_NO,j.Descriptionshamsi
FROM INSERTED j
END