J'ai cr=E9e un trigger dans une base commerciale SAGE SQL Server,
trigger qui porte sur la table F_COMPTET (table des tiers). Le principe
est le suivant : affecter un bar=EAme pour chaque tiers par
l'interm=E9diaire du champ statistique n=B06. Lorsque l'utilisateur
quitte la fiche tiers, le trigger va tout d'abord rechercher la
correspondance entre l'indice du champ CT_Statistique06 et l'indice du
bar=EAme. Une fois l'indice trouv=E9, on ins=E8re dans la table
F_TARIFSELECT l'association tiers/bar=EAme en ayant pris soin de
supprimer auparavant toute association du client avec un autre bar=EAme
existant.
Le probl=E8me est le suivant : lorsque je ferme la fiche tiers, j'ai la
sympathique erreur suivante :
DELETE a =E9chou=E9 car les options SET suivantes comportent des
param=E8tres incorrects : 'QUOTED_IDENTIFIER'.
J'ai pourtant essay=E9 l'option SET QUOTED_IDENTIFIER OFF mais sans
effet.
Que faire ?
Voici mon trigger (tout conseil d'optimisation est =E9videmment le
bienvenu)
CREATE TRIGGER TG_BAREME_F_COMPTET ON F_COMPTET
FOR UPDATE
AS
DECLARE @CT_Num VARCHAR(32)
SELECT @CT_Num=3DCT_Num FROM INSERTED
DELETE FROM F_TARIFSELECT
WHERE TS_Ref =3D @CT_Num
AND (TF_No =3D 2 OR TF_No =3D 4 OR TF_No =3D 5 OR TF_No =3D 6)
INSERT INTO F_TARIFSELECT(TF_No, TS_Interes, TS_Ref)
SELECT F_TARIF.TF_No, 3 AS TS_Interes, CT_Num AS TS_Ref
FROM F_COMPTET, F_TARIF
WHERE F_COMPTET.CT_Statistique06 =3D RIGHT(F_TARIF.AR_Ref,1)
AND CT_Statistique06 <> ''
AND CT_Num NOT IN
(
SELECT TS_Ref
FROM F_TARIFSELECT
)
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Fred BROUARD
bonjour,
a écrit:
Bonjour,
J'ai crée un trigger dans une base commerciale SAGE SQL Server, trigger qui porte sur la table F_COMPTET (table des tiers). Le principe est le suivant : affecter un barême pour chaque tiers par l'intermédiaire du champ statistique n°6. Lorsque l'utilisateur quitte la fiche tiers, le trigger va tout d'abord rechercher la correspondance entre l'indice du champ CT_Statistique06 et l'indice du barême. Une fois l'indice trouvé, on insère dans la table F_TARIFSELECT l'association tiers/barême en ayant pris soin de supprimer auparavant toute association du client avec un autre barême existant.
Le problème est le suivant : lorsque je ferme la fiche tiers, j'ai la sympathique erreur suivante :
DELETE a échoué car les options SET suivantes comportent des paramètres incorrects : 'QUOTED_IDENTIFIER'.
J'ai pourtant essayé l'option SET QUOTED_IDENTIFIER OFF mais sans effet.
Que faire ?
Voici mon trigger (tout conseil d'optimisation est évidemment le bienvenu)
CREATE TRIGGER TG_BAREME_F_COMPTET ON F_COMPTET FOR UPDATE AS DECLARE @CT_Num VARCHAR(32)
SELECT @CT_Num=CT_Num FROM INSERTED
DELETE FROM F_TARIFSELECT WHERE TS_Ref = @CT_Num AND (TF_No = 2 OR TF_No = 4 OR TF_No = 5 OR TF_No = 6)
INSERT INTO F_TARIFSELECT(TF_No, TS_Interes, TS_Ref) SELECT F_TARIF.TF_No, 3 AS TS_Interes, CT_Num AS TS_Ref FROM F_COMPTET, F_TARIF WHERE F_COMPTET.CT_Statistique06 = RIGHT(F_TARIF.AR_Ref,1) AND CT_Statistique06 <> '' AND CT_Num NOT IN ( SELECT TS_Ref FROM F_TARIFSELECT )
Votre logique au sein du trigger est déjà une hérésie car vous n'avez prévu que le seul cas ou le déclenchement se fait sur une seule ligne.
Or un trigger se déclanche une seule fois quelque soit le nombre de ligne.
Votre trigger ne vas donc opérer que pour une seule ligne même si la mise à jour concerne 33 lignes !
voici donc une correction de votre trigger :
CREATE TRIGGER TG_BAREME_F_COMPTET ON F_COMPTET FOR UPDATE AS
DELETE FROM F_TARIFSELECT WHERE TS_Ref IN (SELECT CT_Num FROM INSERTED) AND TF_No IN (2, 4, 5, 6)
INSERT INTO F_TARIFSELECT (TF_No, TS_Interes, TS_Ref) SELECT F_TARIF.TF_No, 3, CT_Num FROM F_COMPTET C INNER JOIN F_TARIF T ON C.CT_Statistique06 = RIGHT(T.AR_Ref, 1) WHERE CT_Statistique06 <> '' AND CT_Num NOT IN (SELECT TS_Ref FROM F_TARIFSELECT)
maintenant je ne sais pourquoi l'erreur à été levée, mais des éditeurs comme SAGE implémentent des triggers de contrôle de redondance pour éviter que les bidouilleurs en informatique ne polluent les données des bases par des INSERT, UPDATE ou DELETE parasite et rendent la base incohérente.
testez donc un trigger que ne fait rien dans les données et voyez ce qui se passe et di vous avez la même erreur. Par exemple un trigger qui genère un faux message d'erreur.
A +
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation ********************* http://www.datasapiens.com ***********************
bonjour,
nicolasheurtevin@gmail.com a écrit:
Bonjour,
J'ai crée un trigger dans une base commerciale SAGE SQL Server,
trigger qui porte sur la table F_COMPTET (table des tiers). Le principe
est le suivant : affecter un barême pour chaque tiers par
l'intermédiaire du champ statistique n°6. Lorsque l'utilisateur
quitte la fiche tiers, le trigger va tout d'abord rechercher la
correspondance entre l'indice du champ CT_Statistique06 et l'indice du
barême. Une fois l'indice trouvé, on insère dans la table
F_TARIFSELECT l'association tiers/barême en ayant pris soin de
supprimer auparavant toute association du client avec un autre barême
existant.
Le problème est le suivant : lorsque je ferme la fiche tiers, j'ai la
sympathique erreur suivante :
DELETE a échoué car les options SET suivantes comportent des
paramètres incorrects : 'QUOTED_IDENTIFIER'.
J'ai pourtant essayé l'option SET QUOTED_IDENTIFIER OFF mais sans
effet.
Que faire ?
Voici mon trigger (tout conseil d'optimisation est évidemment le
bienvenu)
CREATE TRIGGER TG_BAREME_F_COMPTET ON F_COMPTET
FOR UPDATE
AS
DECLARE @CT_Num VARCHAR(32)
SELECT @CT_Num=CT_Num FROM INSERTED
DELETE FROM F_TARIFSELECT
WHERE TS_Ref = @CT_Num
AND (TF_No = 2 OR TF_No = 4 OR TF_No = 5 OR TF_No = 6)
INSERT INTO F_TARIFSELECT(TF_No, TS_Interes, TS_Ref)
SELECT F_TARIF.TF_No, 3 AS TS_Interes, CT_Num AS TS_Ref
FROM F_COMPTET, F_TARIF
WHERE F_COMPTET.CT_Statistique06 = RIGHT(F_TARIF.AR_Ref,1)
AND CT_Statistique06 <> ''
AND CT_Num NOT IN
(
SELECT TS_Ref
FROM F_TARIFSELECT
)
Votre logique au sein du trigger est déjà une hérésie car vous n'avez prévu que
le seul cas ou le déclenchement se fait sur une seule ligne.
Or un trigger se déclanche une seule fois quelque soit le nombre de ligne.
Votre trigger ne vas donc opérer que pour une seule ligne même si la mise à jour
concerne 33 lignes !
voici donc une correction de votre trigger :
CREATE TRIGGER TG_BAREME_F_COMPTET ON F_COMPTET
FOR UPDATE
AS
DELETE FROM F_TARIFSELECT
WHERE TS_Ref IN (SELECT CT_Num
FROM INSERTED)
AND TF_No IN (2, 4, 5, 6)
INSERT INTO F_TARIFSELECT (TF_No, TS_Interes, TS_Ref)
SELECT F_TARIF.TF_No, 3, CT_Num
FROM F_COMPTET C
INNER JOIN F_TARIF T
ON C.CT_Statistique06 = RIGHT(T.AR_Ref, 1)
WHERE CT_Statistique06 <> ''
AND CT_Num NOT IN (SELECT TS_Ref
FROM F_TARIFSELECT)
maintenant je ne sais pourquoi l'erreur à été levée, mais des éditeurs comme
SAGE implémentent des triggers de contrôle de redondance pour éviter que les
bidouilleurs en informatique ne polluent les données des bases par des INSERT,
UPDATE ou DELETE parasite et rendent la base incohérente.
testez donc un trigger que ne fait rien dans les données et voyez ce qui se
passe et di vous avez la même erreur. Par exemple un trigger qui genère un faux
message d'erreur.
A +
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
J'ai crée un trigger dans une base commerciale SAGE SQL Server, trigger qui porte sur la table F_COMPTET (table des tiers). Le principe est le suivant : affecter un barême pour chaque tiers par l'intermédiaire du champ statistique n°6. Lorsque l'utilisateur quitte la fiche tiers, le trigger va tout d'abord rechercher la correspondance entre l'indice du champ CT_Statistique06 et l'indice du barême. Une fois l'indice trouvé, on insère dans la table F_TARIFSELECT l'association tiers/barême en ayant pris soin de supprimer auparavant toute association du client avec un autre barême existant.
Le problème est le suivant : lorsque je ferme la fiche tiers, j'ai la sympathique erreur suivante :
DELETE a échoué car les options SET suivantes comportent des paramètres incorrects : 'QUOTED_IDENTIFIER'.
J'ai pourtant essayé l'option SET QUOTED_IDENTIFIER OFF mais sans effet.
Que faire ?
Voici mon trigger (tout conseil d'optimisation est évidemment le bienvenu)
CREATE TRIGGER TG_BAREME_F_COMPTET ON F_COMPTET FOR UPDATE AS DECLARE @CT_Num VARCHAR(32)
SELECT @CT_Num=CT_Num FROM INSERTED
DELETE FROM F_TARIFSELECT WHERE TS_Ref = @CT_Num AND (TF_No = 2 OR TF_No = 4 OR TF_No = 5 OR TF_No = 6)
INSERT INTO F_TARIFSELECT(TF_No, TS_Interes, TS_Ref) SELECT F_TARIF.TF_No, 3 AS TS_Interes, CT_Num AS TS_Ref FROM F_COMPTET, F_TARIF WHERE F_COMPTET.CT_Statistique06 = RIGHT(F_TARIF.AR_Ref,1) AND CT_Statistique06 <> '' AND CT_Num NOT IN ( SELECT TS_Ref FROM F_TARIFSELECT )
Votre logique au sein du trigger est déjà une hérésie car vous n'avez prévu que le seul cas ou le déclenchement se fait sur une seule ligne.
Or un trigger se déclanche une seule fois quelque soit le nombre de ligne.
Votre trigger ne vas donc opérer que pour une seule ligne même si la mise à jour concerne 33 lignes !
voici donc une correction de votre trigger :
CREATE TRIGGER TG_BAREME_F_COMPTET ON F_COMPTET FOR UPDATE AS
DELETE FROM F_TARIFSELECT WHERE TS_Ref IN (SELECT CT_Num FROM INSERTED) AND TF_No IN (2, 4, 5, 6)
INSERT INTO F_TARIFSELECT (TF_No, TS_Interes, TS_Ref) SELECT F_TARIF.TF_No, 3, CT_Num FROM F_COMPTET C INNER JOIN F_TARIF T ON C.CT_Statistique06 = RIGHT(T.AR_Ref, 1) WHERE CT_Statistique06 <> '' AND CT_Num NOT IN (SELECT TS_Ref FROM F_TARIFSELECT)
maintenant je ne sais pourquoi l'erreur à été levée, mais des éditeurs comme SAGE implémentent des triggers de contrôle de redondance pour éviter que les bidouilleurs en informatique ne polluent les données des bases par des INSERT, UPDATE ou DELETE parasite et rendent la base incohérente.
testez donc un trigger que ne fait rien dans les données et voyez ce qui se passe et di vous avez la même erreur. Par exemple un trigger qui genère un faux message d'erreur.
A +
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation ********************* http://www.datasapiens.com ***********************
Med Bouchenafa
Il faut probablement inclure SET QUOTED_IDENTIFIER OFF avant la création du trigger comme ceci
SET QUOTED_IDENTIFIER OFF GO CREATE TRIGGER.... GO SET QUOTED_IDENTIFIER ON GO
-- Bien cordialement Med Bouchenafa
wrote in message news: Bonjour,
J'ai crée un trigger dans une base commerciale SAGE SQL Server, trigger qui porte sur la table F_COMPTET (table des tiers). Le principe est le suivant : affecter un barême pour chaque tiers par l'intermédiaire du champ statistique n°6. Lorsque l'utilisateur quitte la fiche tiers, le trigger va tout d'abord rechercher la correspondance entre l'indice du champ CT_Statistique06 et l'indice du barême. Une fois l'indice trouvé, on insère dans la table F_TARIFSELECT l'association tiers/barême en ayant pris soin de supprimer auparavant toute association du client avec un autre barême existant.
Le problème est le suivant : lorsque je ferme la fiche tiers, j'ai la sympathique erreur suivante :
DELETE a échoué car les options SET suivantes comportent des paramètres incorrects : 'QUOTED_IDENTIFIER'.
J'ai pourtant essayé l'option SET QUOTED_IDENTIFIER OFF mais sans effet.
Que faire ?
Voici mon trigger (tout conseil d'optimisation est évidemment le bienvenu)
CREATE TRIGGER TG_BAREME_F_COMPTET ON F_COMPTET FOR UPDATE AS DECLARE @CT_Num VARCHAR(32)
SELECT @CT_Num=CT_Num FROM INSERTED
DELETE FROM F_TARIFSELECT WHERE TS_Ref = @CT_Num AND (TF_No = 2 OR TF_No = 4 OR TF_No = 5 OR TF_No = 6)
INSERT INTO F_TARIFSELECT(TF_No, TS_Interes, TS_Ref) SELECT F_TARIF.TF_No, 3 AS TS_Interes, CT_Num AS TS_Ref FROM F_COMPTET, F_TARIF WHERE F_COMPTET.CT_Statistique06 = RIGHT(F_TARIF.AR_Ref,1) AND CT_Statistique06 <> '' AND CT_Num NOT IN ( SELECT TS_Ref FROM F_TARIFSELECT )
Il faut probablement inclure SET QUOTED_IDENTIFIER OFF avant la création du
trigger
comme ceci
SET QUOTED_IDENTIFIER OFF
GO
CREATE TRIGGER....
GO
SET QUOTED_IDENTIFIER ON
GO
--
Bien cordialement
Med Bouchenafa
<nicolasheurtevin@gmail.com> wrote in message
news:1135069916.270625.58790@f14g2000cwb.googlegroups.com...
Bonjour,
J'ai crée un trigger dans une base commerciale SAGE SQL Server,
trigger qui porte sur la table F_COMPTET (table des tiers). Le principe
est le suivant : affecter un barême pour chaque tiers par
l'intermédiaire du champ statistique n°6. Lorsque l'utilisateur
quitte la fiche tiers, le trigger va tout d'abord rechercher la
correspondance entre l'indice du champ CT_Statistique06 et l'indice du
barême. Une fois l'indice trouvé, on insère dans la table
F_TARIFSELECT l'association tiers/barême en ayant pris soin de
supprimer auparavant toute association du client avec un autre barême
existant.
Le problème est le suivant : lorsque je ferme la fiche tiers, j'ai la
sympathique erreur suivante :
DELETE a échoué car les options SET suivantes comportent des
paramètres incorrects : 'QUOTED_IDENTIFIER'.
J'ai pourtant essayé l'option SET QUOTED_IDENTIFIER OFF mais sans
effet.
Que faire ?
Voici mon trigger (tout conseil d'optimisation est évidemment le
bienvenu)
CREATE TRIGGER TG_BAREME_F_COMPTET ON F_COMPTET
FOR UPDATE
AS
DECLARE @CT_Num VARCHAR(32)
SELECT @CT_Num=CT_Num FROM INSERTED
DELETE FROM F_TARIFSELECT
WHERE TS_Ref = @CT_Num
AND (TF_No = 2 OR TF_No = 4 OR TF_No = 5 OR TF_No = 6)
INSERT INTO F_TARIFSELECT(TF_No, TS_Interes, TS_Ref)
SELECT F_TARIF.TF_No, 3 AS TS_Interes, CT_Num AS TS_Ref
FROM F_COMPTET, F_TARIF
WHERE F_COMPTET.CT_Statistique06 = RIGHT(F_TARIF.AR_Ref,1)
AND CT_Statistique06 <> ''
AND CT_Num NOT IN
(
SELECT TS_Ref
FROM F_TARIFSELECT
)
Il faut probablement inclure SET QUOTED_IDENTIFIER OFF avant la création du trigger comme ceci
SET QUOTED_IDENTIFIER OFF GO CREATE TRIGGER.... GO SET QUOTED_IDENTIFIER ON GO
-- Bien cordialement Med Bouchenafa
wrote in message news: Bonjour,
J'ai crée un trigger dans une base commerciale SAGE SQL Server, trigger qui porte sur la table F_COMPTET (table des tiers). Le principe est le suivant : affecter un barême pour chaque tiers par l'intermédiaire du champ statistique n°6. Lorsque l'utilisateur quitte la fiche tiers, le trigger va tout d'abord rechercher la correspondance entre l'indice du champ CT_Statistique06 et l'indice du barême. Une fois l'indice trouvé, on insère dans la table F_TARIFSELECT l'association tiers/barême en ayant pris soin de supprimer auparavant toute association du client avec un autre barême existant.
Le problème est le suivant : lorsque je ferme la fiche tiers, j'ai la sympathique erreur suivante :
DELETE a échoué car les options SET suivantes comportent des paramètres incorrects : 'QUOTED_IDENTIFIER'.
J'ai pourtant essayé l'option SET QUOTED_IDENTIFIER OFF mais sans effet.
Que faire ?
Voici mon trigger (tout conseil d'optimisation est évidemment le bienvenu)
CREATE TRIGGER TG_BAREME_F_COMPTET ON F_COMPTET FOR UPDATE AS DECLARE @CT_Num VARCHAR(32)
SELECT @CT_Num=CT_Num FROM INSERTED
DELETE FROM F_TARIFSELECT WHERE TS_Ref = @CT_Num AND (TF_No = 2 OR TF_No = 4 OR TF_No = 5 OR TF_No = 6)
INSERT INTO F_TARIFSELECT(TF_No, TS_Interes, TS_Ref) SELECT F_TARIF.TF_No, 3 AS TS_Interes, CT_Num AS TS_Ref FROM F_COMPTET, F_TARIF WHERE F_COMPTET.CT_Statistique06 = RIGHT(F_TARIF.AR_Ref,1) AND CT_Statistique06 <> '' AND CT_Num NOT IN ( SELECT TS_Ref FROM F_TARIFSELECT )
Sylvain Lafontaine
Ou programmer le trigger de façon indépendante de cette option, c'est-à-dire en utilisant l'apostrophe ou simple quote ' comme délimiteur des chaînes de caractères (et si possible en évitant les caractères spéciaux et espaces blancs dans les noms symboliques et/ou en utilisant [] sur SQL-Server).
-- Sylvain Lafontaine, ing. MVP - Technologies Virtual-PC E-mail: http://cerbermail.com/?QugbLEWINF
"Med Bouchenafa" wrote in message news:%
Il faut probablement inclure SET QUOTED_IDENTIFIER OFF avant la création du trigger comme ceci
SET QUOTED_IDENTIFIER OFF GO CREATE TRIGGER.... GO SET QUOTED_IDENTIFIER ON GO
-- Bien cordialement Med Bouchenafa
wrote in message news: Bonjour,
J'ai crée un trigger dans une base commerciale SAGE SQL Server, trigger qui porte sur la table F_COMPTET (table des tiers). Le principe est le suivant : affecter un barême pour chaque tiers par l'intermédiaire du champ statistique n°6. Lorsque l'utilisateur quitte la fiche tiers, le trigger va tout d'abord rechercher la correspondance entre l'indice du champ CT_Statistique06 et l'indice du barême. Une fois l'indice trouvé, on insère dans la table F_TARIFSELECT l'association tiers/barême en ayant pris soin de supprimer auparavant toute association du client avec un autre barême existant.
Le problème est le suivant : lorsque je ferme la fiche tiers, j'ai la sympathique erreur suivante :
DELETE a échoué car les options SET suivantes comportent des paramètres incorrects : 'QUOTED_IDENTIFIER'.
J'ai pourtant essayé l'option SET QUOTED_IDENTIFIER OFF mais sans effet.
Que faire ?
Voici mon trigger (tout conseil d'optimisation est évidemment le bienvenu)
CREATE TRIGGER TG_BAREME_F_COMPTET ON F_COMPTET FOR UPDATE AS DECLARE @CT_Num VARCHAR(32)
SELECT @CT_Num=CT_Num FROM INSERTED
DELETE FROM F_TARIFSELECT WHERE TS_Ref = @CT_Num AND (TF_No = 2 OR TF_No = 4 OR TF_No = 5 OR TF_No = 6)
INSERT INTO F_TARIFSELECT(TF_No, TS_Interes, TS_Ref) SELECT F_TARIF.TF_No, 3 AS TS_Interes, CT_Num AS TS_Ref FROM F_COMPTET, F_TARIF WHERE F_COMPTET.CT_Statistique06 = RIGHT(F_TARIF.AR_Ref,1) AND CT_Statistique06 <> '' AND CT_Num NOT IN ( SELECT TS_Ref FROM F_TARIFSELECT )
Ou programmer le trigger de façon indépendante de cette option, c'est-à-dire
en utilisant l'apostrophe ou simple quote ' comme délimiteur des chaînes de
caractères (et si possible en évitant les caractères spéciaux et espaces
blancs dans les noms symboliques et/ou en utilisant [] sur SQL-Server).
--
Sylvain Lafontaine, ing.
MVP - Technologies Virtual-PC
E-mail: http://cerbermail.com/?QugbLEWINF
"Med Bouchenafa" <com.hotmail@bouchenafa> wrote in message
news:%23xMqScXBGHA.3408@TK2MSFTNGP12.phx.gbl...
Il faut probablement inclure SET QUOTED_IDENTIFIER OFF avant la création
du trigger
comme ceci
SET QUOTED_IDENTIFIER OFF
GO
CREATE TRIGGER....
GO
SET QUOTED_IDENTIFIER ON
GO
--
Bien cordialement
Med Bouchenafa
<nicolasheurtevin@gmail.com> wrote in message
news:1135069916.270625.58790@f14g2000cwb.googlegroups.com...
Bonjour,
J'ai crée un trigger dans une base commerciale SAGE SQL Server,
trigger qui porte sur la table F_COMPTET (table des tiers). Le principe
est le suivant : affecter un barême pour chaque tiers par
l'intermédiaire du champ statistique n°6. Lorsque l'utilisateur
quitte la fiche tiers, le trigger va tout d'abord rechercher la
correspondance entre l'indice du champ CT_Statistique06 et l'indice du
barême. Une fois l'indice trouvé, on insère dans la table
F_TARIFSELECT l'association tiers/barême en ayant pris soin de
supprimer auparavant toute association du client avec un autre barême
existant.
Le problème est le suivant : lorsque je ferme la fiche tiers, j'ai la
sympathique erreur suivante :
DELETE a échoué car les options SET suivantes comportent des
paramètres incorrects : 'QUOTED_IDENTIFIER'.
J'ai pourtant essayé l'option SET QUOTED_IDENTIFIER OFF mais sans
effet.
Que faire ?
Voici mon trigger (tout conseil d'optimisation est évidemment le
bienvenu)
CREATE TRIGGER TG_BAREME_F_COMPTET ON F_COMPTET
FOR UPDATE
AS
DECLARE @CT_Num VARCHAR(32)
SELECT @CT_Num=CT_Num FROM INSERTED
DELETE FROM F_TARIFSELECT
WHERE TS_Ref = @CT_Num
AND (TF_No = 2 OR TF_No = 4 OR TF_No = 5 OR TF_No = 6)
INSERT INTO F_TARIFSELECT(TF_No, TS_Interes, TS_Ref)
SELECT F_TARIF.TF_No, 3 AS TS_Interes, CT_Num AS TS_Ref
FROM F_COMPTET, F_TARIF
WHERE F_COMPTET.CT_Statistique06 = RIGHT(F_TARIF.AR_Ref,1)
AND CT_Statistique06 <> ''
AND CT_Num NOT IN
(
SELECT TS_Ref
FROM F_TARIFSELECT
)
Ou programmer le trigger de façon indépendante de cette option, c'est-à-dire en utilisant l'apostrophe ou simple quote ' comme délimiteur des chaînes de caractères (et si possible en évitant les caractères spéciaux et espaces blancs dans les noms symboliques et/ou en utilisant [] sur SQL-Server).
-- Sylvain Lafontaine, ing. MVP - Technologies Virtual-PC E-mail: http://cerbermail.com/?QugbLEWINF
"Med Bouchenafa" wrote in message news:%
Il faut probablement inclure SET QUOTED_IDENTIFIER OFF avant la création du trigger comme ceci
SET QUOTED_IDENTIFIER OFF GO CREATE TRIGGER.... GO SET QUOTED_IDENTIFIER ON GO
-- Bien cordialement Med Bouchenafa
wrote in message news: Bonjour,
J'ai crée un trigger dans une base commerciale SAGE SQL Server, trigger qui porte sur la table F_COMPTET (table des tiers). Le principe est le suivant : affecter un barême pour chaque tiers par l'intermédiaire du champ statistique n°6. Lorsque l'utilisateur quitte la fiche tiers, le trigger va tout d'abord rechercher la correspondance entre l'indice du champ CT_Statistique06 et l'indice du barême. Une fois l'indice trouvé, on insère dans la table F_TARIFSELECT l'association tiers/barême en ayant pris soin de supprimer auparavant toute association du client avec un autre barême existant.
Le problème est le suivant : lorsque je ferme la fiche tiers, j'ai la sympathique erreur suivante :
DELETE a échoué car les options SET suivantes comportent des paramètres incorrects : 'QUOTED_IDENTIFIER'.
J'ai pourtant essayé l'option SET QUOTED_IDENTIFIER OFF mais sans effet.
Que faire ?
Voici mon trigger (tout conseil d'optimisation est évidemment le bienvenu)
CREATE TRIGGER TG_BAREME_F_COMPTET ON F_COMPTET FOR UPDATE AS DECLARE @CT_Num VARCHAR(32)
SELECT @CT_Num=CT_Num FROM INSERTED
DELETE FROM F_TARIFSELECT WHERE TS_Ref = @CT_Num AND (TF_No = 2 OR TF_No = 4 OR TF_No = 5 OR TF_No = 6)
INSERT INTO F_TARIFSELECT(TF_No, TS_Interes, TS_Ref) SELECT F_TARIF.TF_No, 3 AS TS_Interes, CT_Num AS TS_Ref FROM F_COMPTET, F_TARIF WHERE F_COMPTET.CT_Statistique06 = RIGHT(F_TARIF.AR_Ref,1) AND CT_Statistique06 <> '' AND CT_Num NOT IN ( SELECT TS_Ref FROM F_TARIFSELECT )
nicolasheurtevin
Merci à tous pour vos réponses. Je concède effectivement une certaine hérésie dans mon trigger (je débute ... mais ce n'est pas une raison). Toujours est-il que même en essayant avec les instructions SET QUOTED_IDENTIFIER OFF et GO avant le trigger, une erreur persiste mais cette fois ci dans la cohérence du trigger lors du clic sur le bouton Appliquer :
Erreur 170 : Ligne 2 : syntaxe incorrecte vers 'GO'. 'ALTER TRIGGER' doit être la première instruction d'un lot de requête s.
Merci à tous pour vos réponses.
Je concède effectivement une certaine hérésie dans mon trigger (je
débute ... mais ce n'est pas une raison).
Toujours est-il que même en essayant avec les instructions SET
QUOTED_IDENTIFIER OFF et GO avant le trigger, une erreur persiste mais
cette fois ci dans la cohérence du trigger lors du clic sur le bouton
Appliquer :
Erreur 170 : Ligne 2 : syntaxe incorrecte vers 'GO'.
'ALTER TRIGGER' doit être la première instruction d'un lot de requête s.
Merci à tous pour vos réponses. Je concède effectivement une certaine hérésie dans mon trigger (je débute ... mais ce n'est pas une raison). Toujours est-il que même en essayant avec les instructions SET QUOTED_IDENTIFIER OFF et GO avant le trigger, une erreur persiste mais cette fois ci dans la cohérence du trigger lors du clic sur le bouton Appliquer :
Erreur 170 : Ligne 2 : syntaxe incorrecte vers 'GO'. 'ALTER TRIGGER' doit être la première instruction d'un lot de requête s.
Med Bouchenafa
Je pense que tu dois créer ton trigger par Entreprise Manager. Ce que je t'ai donné dans un précédent message est à faire dans l'Analyseur de requêtes
-- Bien cordialement Med Bouchenafa
wrote in message news: Merci tous pour vos rponses. Je concde effectivement une certaine hrsie dans mon trigger (je dbute ... mais ce n'est pas une raison). Toujours est-il que mme en essayant avec les instructions SET QUOTED_IDENTIFIER OFF et GO avant le trigger, une erreur persiste mais cette fois ci dans la cohrence du trigger lors du clic sur le bouton Appliquer :
Erreur 170 : Ligne 2 : syntaxe incorrecte vers 'GO'. 'ALTER TRIGGER' doit tre la premire instruction d'un lot de requtes.
Je pense que tu dois créer ton trigger par Entreprise Manager.
Ce que je t'ai donné dans un précédent message est à faire dans l'Analyseur
de requêtes
--
Bien cordialement
Med Bouchenafa
<nicolasheurtevin@gmail.com> wrote in message
news:1135163864.727490.53520@g44g2000cwa.googlegroups.com...
Merci tous pour vos rponses.
Je concde effectivement une certaine hrsie dans mon trigger (je
dbute ... mais ce n'est pas une raison).
Toujours est-il que mme en essayant avec les instructions SET
QUOTED_IDENTIFIER OFF et GO avant le trigger, une erreur persiste mais
cette fois ci dans la cohrence du trigger lors du clic sur le bouton
Appliquer :
Erreur 170 : Ligne 2 : syntaxe incorrecte vers 'GO'.
'ALTER TRIGGER' doit tre la premire instruction d'un lot de requtes.
Je pense que tu dois créer ton trigger par Entreprise Manager. Ce que je t'ai donné dans un précédent message est à faire dans l'Analyseur de requêtes
-- Bien cordialement Med Bouchenafa
wrote in message news: Merci tous pour vos rponses. Je concde effectivement une certaine hrsie dans mon trigger (je dbute ... mais ce n'est pas une raison). Toujours est-il que mme en essayant avec les instructions SET QUOTED_IDENTIFIER OFF et GO avant le trigger, une erreur persiste mais cette fois ci dans la cohrence du trigger lors du clic sur le bouton Appliquer :
Erreur 170 : Ligne 2 : syntaxe incorrecte vers 'GO'. 'ALTER TRIGGER' doit tre la premire instruction d'un lot de requtes.