2009-09-27 47 views
0

使用SQL Server 2000觸發器將如何工作?

我在做新的數據庫

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 2009-09-27 10:26:27

+0

未從您的意見中清除 – Gopal 2009-09-27 10:38:12

回答

3

我想你需要的是:

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

插入的「表」包含了所有的新數據,「表」被刪除的刪除數據的容器。當更新發生時,'表'被填滿。