مشکل در Triggerهای After Delete و After Update در SqlServer
من جدولی به اسم آموزش دارم که قصد دارم چند Trigger براش بنویسم ( برای عملیاتهای Insert,Delete,Update )
زمانی که تغییرات ذکر شده در جدول اتفاق افتاد تریگر ها یک ردیف در جدول سابقه (CaseHistory) ایجاد میکنن .
تریگر After Insert به خوبی کار می کنه ولی After Update و After Delete مشکل دارن .
ALTER TRIGGER [dbo].[Tr_Tutorials_UpdateEventSubmit]
ON [dbo].[Tutorials]
FOR UPDATE
AS
BEGIN
--------------------------------------------
DECLARE @ID_Row uniqueidentifier = NEWID()
DECLARE @Archive_ID nvarchar(150)
DECLARE @Person_ID nvarchar(50)
DECLARE @Person_FullName nvarchar(150)
DECLARE @Submit_DateTime nvarchar(150)
--------------------------------------
SELECT @Archive_ID=ID FROM inserted
SELECT @Person_ID=UserSubmitID FROM inserted
SELECT @Person_FullName=(SELECT [Name]+' '+[Family] FROM AspNetUsers WHERE Id= @Person_ID)
SELECT @Submit_DateTime=(SELECT cast( FORMAT(GETDATE(), 'yyyy/MM/dd - HH:mm:ss', 'fa') as nvarchar))
------------------------------------
INSERT INTO CaseHistories(ID, ArchiveID,ArchiveName,PersonID,PersonFullname,SubmitDateTime,MissionType) VALUES(@ID_Row, @Archive_ID,N'آموزش',@Person_ID , @Person_FullName , @Submit_DateTime,2)
END
در ادامه تصویری از جدول رو مشاهده می کنید:
ممنون میشم دوستان کمک کنن . تشکر
پاسخ هوش مصنوعی
برای درست کار کردن تریگرهای After Update و After Delete در SQL Server، باید به چند نکته توجه کنید:
1. **مجموعه های INSERTED و DELETED**: در تریگرهای UPDATE، جدول INSERTED شامل ردیف های جدید و جدول DELETED شامل ردیف های قبلی می باشد. بنابراین اگر شما تنها از جدول INSERTED استفاده کنید، ممکن است به مشکل بخورید.
2. **پردازش چند ردیف**: تریگرها باید این قابلیت را داشته باشند که چندین ردیف را در یک بار پردازش کنند. بنابراین شما باید تغییرات لازم را برای پردازش چند ردیف اعمال کنید.
برای تریگر After Update، می توانید به صورت زیر عمل کنید:
ALTER TRIGGER [dbo].[Tr_Tutorials_UpdateEventSubmit]
ON [dbo].[Tutorials]
FOR UPDATE
AS
BEGIN
DECLARE @ID_Row uniqueidentifier = NEWID()
DECLARE @Archive_ID nvarchar(150)
DECLARE @Person_ID nvarchar(50)
DECLARE @Person_FullName nvarchar(150)
DECLARE @Submit_DateTime nvarchar(150)
-- ایجاد یک جدول موقت
DECLARE @Temp TABLE (ID nvarchar(150), UserSubmitID nvarchar(50))
-- وارد کردن داده ها به جدول موقت
INSERT INTO @Temp (ID, UserSubmitID)
SELECT ID, UserSubmitID FROM inserted
-- پردازش داده ها از جدول موقت
INSERT INTO CaseHistories(ID, ArchiveID, ArchiveName, PersonID, PersonFullname, SubmitDateTime, MissionType)
SELECT NEWID(), ID, N'آموزش', UserSubmitID, (SELECT [Name] + ' ' + [Family] FROM AspNetUsers WHERE Id = UserSubmitID),
CAST(FORMAT(GETDATE(), 'yyyy/MM/dd - HH:mm:ss', 'fa') AS nvarchar), 2
FROM @Temp
END
برای تریگر After Delete، به این صورت عمل کنید:
ALTER TRIGGER [dbo].[Tr_Tutorials_DeleteEventSubmit]
ON [dbo].[Tutorials]
FOR DELETE
AS
BEGIN
DECLARE @ID_Row uniqueidentifier = NEWID()
DECLARE @Archive_ID nvarchar(150)
DECLARE @Person_ID nvarchar(50)
DECLARE @Person_FullName nvarchar(150)
DECLARE @Submit_DateTime nvarchar(150)
-- ایجاد یک جدول موقت
DECLARE @Temp TABLE (ID nvarchar(150), UserSubmitID nvarchar(50))
-- وارد کردن داده ها به جدول موقت
INSERT INTO @Temp (ID, UserSubmitID)
SELECT ID, UserSubmitID FROM deleted
-- پردازش داده ها از جدول موقت
INSERT INTO CaseHistories(ID, ArchiveID, ArchiveName, PersonID, PersonFullname, SubmitDateTime, MissionType)
SELECT NEWID(), ID, N'آموزش', UserSubmitID, (SELECT [Name] + ' ' + [Family] FROM AspNetUsers WHERE Id = UserSubmitID),
CAST(FORMAT(GETDATE(), 'yyyy/MM/dd - HH:mm:ss', 'fa') AS nvarchar), 3
FROM @Temp
END
با این تغییرات، شما میتوانید به درستی ردیف های جدید و قدیمی را برای هر نوع عمل درج، بروزرسانی و حذف پردازش کنید.
- آموزش استفاده از پلاگین گردونه شانس در Asp.net core به همراه سورس
- نمایش متن به صورت فرمت شده در CkEditor
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- حذف کامل یک رکورد در جدول ریلیشن شده
- مقایسه ساختار دو دیتابیس در Sql Server
- اشکال در ایجاد کلید خارجی در Sql Server
- تفاوت اوراکل و Sql Server چیست
- جابه جایی سطر و ستون در Sql Server
- استفاده از Stored Procedure در انتیتی فریم ورک code First
- آپدیت لیستی از رکوردها در Sql Server - آپدیت گروهی اطلاعات در Sql Server
- دلیل پرش 1000 تایی خودکار فیلد identity در Sql server
- مشکل نمایش ندادن Data Type موقع تایپ در Sql Server
- کار با تاریخ شمسی وساعت (استفاده از توابع )