2009-09-27 2 views
0

나는 위의 쿼리가 성공적으로 실행트리거는 어떻게 작동합니까? SQL Server 2000의</p> <p>를 사용

CREATE TRIGGER [CARDEVENTSAVING] ON [dbo].[T_CARDEVENT] 
AFTER INSERT 
AS 

DECLARE @EDATE VARCHAR(50) 
DECLARE @ETIME VARCHAR(50) 
DECLARE @EDOOR NVARCHAR(50) 
DECLARE @EFLOOR NVARCHAR(50) 
DECLARE @EMPID NVARCHAR(50) 
DECLARE @TAG NVARCHAR(50) 
DECLARE @ENAME NVARCHAR(50) 
DECLARE @ELNAME NVARCHAR(50) 
DECLARE @EPART NVARCHAR(50) 
DECLARE @EDEP NVARCHAR(50) 
DECLARE @EFUNCTION NVARCHAR(50) 
DECLARE @STATUS NVARCHAR(50) 
DECLARE @EDATE2 DATETIME 


SELECT @EDATE =(SELECT CARDEVENTDATE FROM INSERTED) 
SELECT @ETIME =(SELECT CARDEVENTTIME FROM INSERTED) 
SELECT @TAG = (SELECT CARDNO FROM INSERTED) 

IF LEN(@TAG) = 4 
SELECT @TAG = '0000'[email protected] 
ELSE IF LEN(@TAG) = 5 
    SELECT @TAG ='000'[email protected] 
ELSE IF LEN(@TAG) = 6 
    SELECT @TAG = '00' + @TAG 
ELSE IF LEN(@TAG) = 7 
    SELECT @TAG = '0' + @TAG 

SELECT @EDOOR = (SELECT DOOR FROM T_PERSONALTRACKING WHERE CARDNO = @TAG) 
SELECT @EFLOOR = (SELECT FLOOR FROM T_PERSONALTRACKING WHERE CARDNO = @TAG) 
SELECT @EMPID = (SELECT SABUN FROM DATALINEDB.DBO.PERSON WHERE TAGNO = @TAG) 
SELECT @ENAME = (SELECT NAME FROM DATALINEDB.DBO.PERSON WHERE TAGNO = @TAG) 
SELECT @ELNAME = (SELECT LastName FROM DATALINEDB.DBO.PERSON WHERE TAGNO = @TAG) 
SELECT @EPART = (SELECT PART FROM DATALINEDB.DBO.PERSON WHERE TAGNO = @TAG) 
SELECT @EDEP = (SELECT MBUSO FROM DATALINEDB.DBO.PERSON WHERE TAGNO = @TAG) 
SELECT @EFUNCTION = (SELECT FUNCTIONKEY FROM INSERTED) 
SELECT @EDATE2 =(SELECT CARDEVENTDATE FROM INSERTED) 

INSERT INTO 
    FINGERPRINTDB.DBO.HISTORY(EDATE, ETIME, EDOOR, EFLOOR, ESABUN, ETAG, 
          ENAME, ELNAME, EPART, EDEP, ESTATUS, EFUNCTION, 
          EINOUT, EDATE2) 
VALUES 
    (@EDATE, @ETIME, @EDOOR, @EFLOOR, @EMPID, @TAG, 
    @ENAME, @ELNAME, @EPART, @EDEP, NULL, @EFUNCTION, 
    NULL, @EDATE2) 

새 데이터베이스에 트리거를 만들? 그러나 행은 이전 데이터베이스에서 영향을받지 않았습니다.

새 데이터베이스에 새 행을 삽입 한 다음 이전 데이터베이스를 검사했는데 아무런 영향이 없었습니까?

다른 데이터베이스에서 데이터를 가져 오는 방법은 무엇입니까?

+2

트리거는 삽입 된 테이블에 행이 하나만 있다고 가정하여 작성됩니다. 트리거를 실행 한 삽입이 둘 이상의 행에 영향을 주면 삽입 된 테이블에 여러 행이 생깁니다. – GilaMonster

+0

귀하의 의견에서 삭제되지 않았습니다. – Gopal

답변

3

난 당신이하는 것이 필요하다고 생각 :

CREATE TRIGGER [CARDEVENTSAVING] ON [dbo].[T_CARDEVENT] 
AFTER INSERT 
AS 
INSERT oldDB.DBO.HISTORY (id, event, ...) 
SELECT id, event, ... 
FROM inserted 

삽입 된 '테이블'모든 새로운 데이터를 포함, '테이블'데이터 삭제 컨테이너를 삭제. 업데이트가 발생하면 'Tables'가 모두 채워집니다.

관련 문제