복잡한 방아쇠 작성
-
05-07-2019 - |
문제
이 게시물은 어제 이전 게시물의 업데이트 (트리거 코드 포함)입니다.
나는 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)
또 봐요.
제휴하지 않습니다 StackOverflow