문제

이 게시물은 어제 이전 게시물의 업데이트 (트리거 코드 포함)입니다.

나는 SQL Server 2000을 사용하고 있습니다. 필드 신청자가 실행되는 트리거를 작성하고 있습니다.

테이블 신청자는 테이블 위치, 테이블 회사 및 테이블 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, lastName, FirstName, Date, Time, Company, 위치 번호, 위치 이름, StatustisPosition, 사용자)입니다.

트리거 쿼리는 다음과 같습니다.

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