كتابة الزناد معقدة
-
05-07-2019 - |
سؤال
وهذا الإعلان هو التحديث (مع رمز الزناد) من مشاركتي في وقت سابق أمس
وأنا باستخدام SQL Server 2000. وأنا أكتب مشغل التي يتم تنفيذها عندما حقل Applicant.AppStatusRowID
ويرتبط الجدول مقدم الطلب إلى الجدول الموقع، الشركة الجدول والجدول AppStatus.
وبلدي المسألة هو خلق ينضم في الاستعلام بلدي.
وعندما يتم تحديث Applicant.AppStatusRowID، أريد الحصول على القيم من Applicant.AppStatusRowID، Applicant.FirstName، Applicant.Lastname، Location.LocNumber، Location.LocationName، Company.CompanyCode، AppStatus.DisplayText
ووينضم ستكون كما يلي:
Select * from Applicant A
Inner Join AppStatus ast on ast.RowID = a.AppStatusRowID
Inner Join Location l on l.RowID = a.LocationRowID
Inner Join Company c on c.RowID = l.CompanyRowID
وهذا هو لإدراجها في جدول المراجعة (الحقول ApplicantID، اسم العائلة، الاسم الأول، التاريخ والوقت، الشركة، رقم الموقع، الموقع اسم، StatusDisposition، العضو)
والاستعلام الزناد هو:
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE TRIGGER tri_UpdateAppDispo ON dbo.Test_App
For Update
AS
declare @Approwid int
Declare @triggername sysname
Set @rowCnt = @@rowcount
Set @triggername = object_name(@@procid)
If @rowCnt = 0
RETURN
If Update(appstatusrowid)
BEGIN
-----------------------------------------------------------------------------
-- insert a record to the AppDispo table, if AppstatusRowid
-- is being Updated
-----------------------------------------------------------------------------
Insert AppDispo(AppID, LastName, FirstName, [DateTime],Company,Location,LocationName,
StatusDispo,[Username])
Select d.Rowid,d.LastName, d.FirstName, getDate(),C.CompanyCode,l.locnum,l.locname, ast.Displaytext,
SUSER_SNAME()+' '+User
From deleted d with(nolock)
Inner join Test_App a with (nolock) on a.RowID = d.rowid
inner join location l with (nolock) on l.rowid = d.Locationrowid
inner join appstatus ast with (nolock) on ast.rowid = d.appstatusrowid
inner join company c with (nolock) on c.rowid = l.CompanyRowid
--Inner Join Deleted d ON a.RowID = d.RowID
--Where (a.rowid = @Approwid)
END
GO
وأي أفكار؟
المحلول
وحاول مع هذا الرمز
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE TRIGGER tri_UpdateAppDispo ON dbo.Test_App
For Update
AS
declare @Approwid int
Declare @triggername sysname
Set @rowCnt = @@rowcount
Set @triggername = object_name(@@procid)
If @rowCnt = 0
RETURN
If Update(appstatusrowid)
BEGIN
-----------------------------------------------------------------------------
-- insert a record to the AppDispo table, if AppstatusRowid
-- is being Updated
-----------------------------------------------------------------------------
Insert AppDispo(AppID, LastName, FirstName, [DateTime],Company,Location,LocationName,
StatusDispo,[Username])
Select d.Rowid,d.LastName, d.FirstName, getDate(),C.CompanyCode,l.locnum,l.locname, ast.Displaytext,
SUSER_SNAME()+' '+User
From deleted d with(nolock),location l with (nolock),appstatus ast with (nolock),company c with (nolock)
where d.Locationrowid =l.rowid and
d.appstatusrowid = ast.rowid and
c.rowid = l.CompanyRowid
END GO
ومع هذا الرمز تحصل على الصف حذف التحديث (على OLD_VALUE)
ورؤيتك.