سؤال

وهذا الإعلان هو التحديث (مع رمز الزناد) من مشاركتي في وقت سابق أمس

وأنا باستخدام 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)

ورؤيتك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top