OVH Cloud OVH Cloud

Est ce que APPEND existe toujours

6 réponses
Avatar
tournesol
Voila je suis confronté a des triggers qui font appel a APPEND
et je suis sous Microsoft SQL Server 2000 - 8.00.760 (Intel X86) Dec 17
2002 14:22:05 Copyright (c) 1988-2003 Microsoft Corporation Standard
Edition on Windows NT 5.0 (Build 2195: Service Pack 4)
et malheureusement il ne reconnait pas APPEND est ce normal ??

6 réponses

Avatar
Fred BROUARD
APPEND n'existe pas en SQL.

A +

tournesol a écrit:
Voila je suis confronté a des triggers qui font appel a APPEND
et je suis sous Microsoft SQL Server 2000 - 8.00.760 (Intel X86) Dec 17
2002 14:22:05 Copyright (c) 1988-2003 Microsoft Corporation Standard
Edition on Windows NT 5.0 (Build 2195: Service Pack 4)
et malheureusement il ne reconnait pas APPEND est ce normal ??




--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************
Avatar
Med Bouchenafa
La clause WITH APPEND peut encore être utilisée, pour des raisons de compatibilité, dans SQL Server
2000.
Il est probable que tu rencontres un problème de syntaxe.
Peux-tu afficher comment tu l'utilises sachant que cette clause n'est pas valable pour les triggers
INSTEAD OF

--
Bien cordialement
Med Bouchenafa


"tournesol" a écrit dans le message de news:

Voila je suis confronté a des triggers qui font appel a APPEND
et je suis sous Microsoft SQL Server 2000 - 8.00.760 (Intel X86) Dec 17
2002 14:22:05 Copyright (c) 1988-2003 Microsoft Corporation Standard
Edition on Windows NT 5.0 (Build 2195: Service Pack 4)
et malheureusement il ne reconnait pas APPEND est ce normal ??



Avatar
tournesol
Voila le trigger

CREATE TRIGGER TG_INS_F_JMOUV ON F_JMOUV FOR INSERT WITH APPEND AS
DECLARE @nb int
SET NOCOUNT ON
SELECT @nb = COUNT(*) FROM INSERTED
WHERE JO_Num IS NOT NULL AND JO_Num <> ''

IF @nb > 0
IF @nb <> (SELECT COUNT(*) FROM INSERTED,F_JOURNAUX
WHERE INSERTED.JO_Num IS NOT NULL AND INSERTED.JO_Num <> ''
AND F_JOURNAUX.cbJO_Num = INSERTED.cbJO_Num)
BEGIN
Raiserror(81108,11,1) WITH SETERROR
Rollback Transaction
Return
END
Avatar
Med Bouchenafa
La syntaxte du CREATE TRIGGER est correcte.
Je viens de faire le test suivant sur 2000 et cela passe sans problème
USE tempdb
GO

CREATE TABLE tblTest1
(
a INT
)
go
CREATE TRIGGER TG_INS_11 ON tblTest1 FOR INSERT WITH APPEND
AS
DECLARE @nb int
SET NOCOUNT ON
SELECT @nb = COUNT(*) FROM INSERTED
WHERE a IS NOT NULL


Quel est exactement ton message d'erreur ?

Bien cordialement
Med Bouchenafa



"tournesol" a écrit :

Voila le trigger

CREATE TRIGGER TG_INS_F_JMOUV ON F_JMOUV FOR INSERT WITH APPEND AS
DECLARE @nb int
SET NOCOUNT ON
SELECT @nb = COUNT(*) FROM INSERTED
WHERE JO_Num IS NOT NULL AND JO_Num <> ''

IF @nb > 0
IF @nb <> (SELECT COUNT(*) FROM INSERTED,F_JOURNAUX
WHERE INSERTED.JO_Num IS NOT NULL AND INSERTED.JO_Num <> ''
AND F_JOURNAUX.cbJO_Num = INSERTED.cbJO_Num)
BEGIN
Raiserror(81108,11,1) WITH SETERROR
Rollback Transaction
Return
END


Avatar
tournesol
Des que je tente d'insérer un nouvel enregistrement j'ai le message d'erreur
suivant :

RAISERROR ne peut localiser l'entree dans sysmessages pour l'erreur 81108

(ATTENTION : J'ai une copie de la base d'origine)

Le deuxieme trigger de cette table pour l'insertion est le suivant
CREATE TRIGGER TG_CBINS_F_JMOUV ON F_JMOUV FOR INSERT WITH APPEND AS
SET NOCOUNT ON
IF dbo.CB_FntIsFileLock('F_JMOUV',3) = 1
BEGIN
Raiserror(80004,11,1) WITH SETERROR
Rollback Transaction
Return
END
IF dbo.CB_FntIsFileLock('F_JMOUV',0) = 1
BEGIN
Raiserror(80008,11,1) WITH SETERROR
Rollback Transaction
Return
END
IF dbo.CB_FntIsFileLock('F_JMOUV',1) = 1
BEGIN
Raiserror(80008,11,1) WITH SETERROR
Rollback Transaction
Return
END

UPDATE F_JMOUV SET cbReplication = (SELECT CB_Replication FROM
cbSysTable WHERE CB_Type = 'CPTA') FROM inserted WHERE F_JMOUV.cbMarq =
inserted.cbMarq
Avatar
Med Bouchenafa
SELECT * FROM master.dbo.sysmessages
WHERE error = 80008
devrait montrer que tu n'as pas d'entrée pour le code d'erreur (80008) que
tu mets dans ton trigger

Bien cordialement
Med Bouchenafa

"tournesol" a écrit :

Des que je tente d'insérer un nouvel enregistrement j'ai le message d'erreur
suivant :

RAISERROR ne peut localiser l'entree dans sysmessages pour l'erreur 81108

(ATTENTION : J'ai une copie de la base d'origine)

Le deuxieme trigger de cette table pour l'insertion est le suivant
CREATE TRIGGER TG_CBINS_F_JMOUV ON F_JMOUV FOR INSERT WITH APPEND AS
SET NOCOUNT ON
IF dbo.CB_FntIsFileLock('F_JMOUV',3) = 1
BEGIN
Raiserror(80004,11,1) WITH SETERROR
Rollback Transaction
Return
END
IF dbo.CB_FntIsFileLock('F_JMOUV',0) = 1
BEGIN
Raiserror(80008,11,1) WITH SETERROR
Rollback Transaction
Return
END
IF dbo.CB_FntIsFileLock('F_JMOUV',1) = 1
BEGIN
Raiserror(80008,11,1) WITH SETERROR
Rollback Transaction
Return
END

UPDATE F_JMOUV SET cbReplication = (SELECT CB_Replication FROM
cbSysTable WHERE CB_Type = 'CPTA') FROM inserted WHERE F_JMOUV.cbMarq =
inserted.cbMarq