2009-09-27 5 views
0

Utilisation de SQL Server 2000Comment les déclencheurs fonctionneront?

Je fais un déclencheur dans la nouvelle base de données

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) 

La requête ci-dessus est en cours d'exécution avec succès? Mais les lignes n'étaient pas affectées dans l'ancienne base de données.

J'ai inséré une nouvelle ligne dans la nouvelle base de données puis j'ai vérifié dans l'ancienne base de données, rien n'a été affecté?

Comment obtenir une donnée à partir d'une autre base de données?

+2

Votre déclencheur est écrit en supposant qu'il n'y a qu'une seule ligne dans la table insérée. Si l'insertion qui a déclenché le déclencheur a affecté plus d'une ligne, il y aura plusieurs lignes dans la table insérée. – GilaMonster

+0

Pas effacé de vos commentaires – Gopal

Répondre

3

Je pense que vous avez besoin que:

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

Le « tableau » inséré contient toutes les nouvelles données, « Tableau » supprimé conteneurs supprimés données. Lorsqu'une mise à jour se produit, les deux 'Tables' sont remplies.

Questions connexes