Bonjour,
j'ai une table d'historique dans laquelle je stocke une requete SQL
d'insertion lorsque je supprime un enregistrement. (ca me permet de faire un
rollback)
Mon pb, c que le trigger refuse de s'enclencher dès qu'une Valeur Null
apparait dans une des colonnes. (qui autorise le Null bien entendu).
Dans l'exemple ci-dessous : la variable @Request me sert à stocker
l'instruction SQL.
Je convertit toutes les données Non Varchar en varchar.
Dans mon test, la variable @cPropositionMaitre est NULL... Cette valeur fait
foirer l'instanciation de la variable @Request qui se retrouve à Null elle
aussi.
Quand il tente d'inserer cette valeur dans ma table d'historique, ca plante
parce que la colonne SupInsert qui stocke le SQL n'accepte pas le Null.
Help please :(
*************
CREATE TRIGGER TPropositionsDelete ON dbo.TPropositions
FOR DELETE
AS
DECLARE @cProposition Varchar(50)
DECLARE @cQuestion Varchar(50)
DECLARE @cSociete Varchar(50)
DECLARE @cAuteur Varchar(50)
DECLARE @OrdreProposition Numeric
DECLARE @Archiver Bit
DECLARE @PropositionValide Bit
DECLARE @NbrPoint Float
DECLARE @IISACreate Bit
DECLARE @cPropositionMaitre Varchar(50)
DECLARE @DateCreate DateTime
DECLARE @DateEdit DateTime
DECLARE @Request Varchar(5000)
DECLARE MyCurseur CURSOR FOR SELECT * FROM Deleted
OPEN MyCurseur
FETCH NEXT FROM MyCurseur INTO
@cProposition,@cQuestion,@cSociete,@cAuteur,@OrdreProposition,@Archiver,@Pro
positionValide,@NbrPoint,@IISACreate,@cPropositionMaitre,@DateCreate,@DateEd
it
IF @@FETCH_STATUS = 0
BEGIN
WHILE @@FETCH_STATUS=0
BEGIN
Select @Request='INSERT INTO TPropositions VALUES (''' + @cProposition +
''',''' + @cQuestion + ''',''' + @cSociete + ''',''' + @cAuteur + ''',' +
CONVERT(Varchar(20),@OrdreProposition) + ',''' +
CONVERT(Varchar(20),@Archiver) + ',' +
CONVERT(Varchar(20),@PropositionValide) + ',' +
CONVERT(Varchar(20),@NbrPoint) + ',' + CONVERT(Varchar(20),@IISACreate) +
',''' + @cPropositionMaitre + ''',''' + CONVERT(Varchar(20),@DateCreate) +
''',''' + CONVERT(Varchar(20),@DateEdit) + ''')'
INSERT INTO TSuppressions
VALUES('TPropositions',@cProposition,@Request,current_timestamp)
FETCH NEXT FROM MyCurseur INTO
@cProposition,@cQuestion,@cSociete,@cAuteur,@OrdreProposition,@Archiver,@Pro
positionValide,@NbrPoint,@IISACreate,@cPropositionMaitre,@DateCreate,@DateEd
it
END
END
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
C'est normal....
Chose fondamentale à comprendre : *NULL n'est pas une valeur, c'est au contraire l'absence de valeur* A lire : http://sqlpro.developpez.com/SQL_AZ_E.html#NULL
Donc, utiliser un convertisseur permettant de passer du marqueur MULL à une valeur déterminée, comme COALESCE par exemple. A lire : http://sqlpro.developpez.com/SQL_AZ_2.html#SELECT_operateurs_null
Saulot a écrit:
Bonjour, j'ai une table d'historique dans laquelle je stocke une requete SQL d'insertion lorsque je supprime un enregistrement. (ca me permet de faire un rollback) Mon pb, c que le trigger refuse de s'enclencher dès qu'une Valeur Null apparait dans une des colonnes. (qui autorise le Null bien entendu). Dans l'exemple ci-dessous : la variable @Request me sert à stocker l'instruction SQL. Je convertit toutes les données Non Varchar en varchar.
Dans mon test, la variable @cPropositionMaitre est NULL... Cette valeur fait foirer l'instanciation de la variable @Request qui se retrouve à Null elle aussi. Quand il tente d'inserer cette valeur dans ma table d'historique, ca plante parce que la colonne SupInsert qui stocke le SQL n'accepte pas le Null.
Help please :(
************* CREATE TRIGGER TPropositionsDelete ON dbo.TPropositions FOR DELETE AS DECLARE @cProposition Varchar(50) DECLARE @cQuestion Varchar(50) DECLARE @cSociete Varchar(50) DECLARE @cAuteur Varchar(50) DECLARE @OrdreProposition Numeric DECLARE @Archiver Bit DECLARE @PropositionValide Bit DECLARE @NbrPoint Float DECLARE @IISACreate Bit DECLARE @cPropositionMaitre Varchar(50) DECLARE @DateCreate DateTime DECLARE @DateEdit DateTime
DECLARE @Request Varchar(5000)
DECLARE MyCurseur CURSOR FOR SELECT * FROM Deleted
OPEN MyCurseur FETCH NEXT FROM MyCurseur INTO @cProposition,@cQuestion,@cSociete,@cAuteur,@OrdreProposition,@Archiver,@Pro positionValide,@NbrPoint,@IISACreate,@cPropositionMaitre,@DateCreate,@DateEd it IF @@FETCH_STATUS = 0 BEGIN WHILE @@FETCH_STATUS=0 BEGIN Select @Request='INSERT INTO TPropositions VALUES (''' + @cProposition + ''',''' + @cQuestion + ''',''' + @cSociete + ''',''' + @cAuteur + ''',' + CONVERT(Varchar(20),@OrdreProposition) + ',''' + CONVERT(Varchar(20),@Archiver) + ',' + CONVERT(Varchar(20),@PropositionValide) + ',' + CONVERT(Varchar(20),@NbrPoint) + ',' + CONVERT(Varchar(20),@IISACreate) + ',''' + @cPropositionMaitre + ''',''' + CONVERT(Varchar(20),@DateCreate) + ''',''' + CONVERT(Varchar(20),@DateEdit) + ''')'
INSERT INTO TSuppressions VALUES('TPropositions',@cProposition,@Request,current_timestamp) FETCH NEXT FROM MyCurseur INTO @cProposition,@cQuestion,@cSociete,@cAuteur,@OrdreProposition,@Archiver,@Pro positionValide,@NbrPoint,@IISACreate,@cPropositionMaitre,@DateCreate,@DateEd it END END
CLOSE MyCurseur DEALLOCATE MyCurseur
--Une première correction du code :
DECLARE MyCurseur CURSOR FOR SELECT * FROM Deleted
OPEN MyCurseur
FETCH NEXT FROM MyCurseur INTO @cProposition, @cQuestion, @cSociete, @cAuteur,@OrdreProposition, @Archiver, @PropositionValide, @NbrPoint, @IISACreate, @cPropositionMaitre, @DateCreate, @DateEdit
INSERT INTO TSuppressions VALUES('TPropositions',@cProposition,@Request,current_timestamp)
FETCH NEXT FROM MyCurseur INTO @cProposition, @cQuestion, @cSociete, @cAuteur,@OrdreProposition, @Archiver, @PropositionValide, @NbrPoint, @IISACreate, @cPropositionMaitre, @DateCreate, @DateEdit END
CLOSE MyCurseur
DEALLOCATE MyCurseur
/**************************
Il faudrait vérifier en faisant cela dans une SP avec un PRINT de @Request si le COALESCE avec NULL des dates est OK...
A +
-- 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 *************************
C'est normal....
Chose fondamentale à comprendre :
*NULL n'est pas une valeur, c'est au contraire l'absence de valeur*
A lire : http://sqlpro.developpez.com/SQL_AZ_E.html#NULL
Donc, utiliser un convertisseur permettant de passer du marqueur MULL à une
valeur déterminée, comme COALESCE par exemple.
A lire :
http://sqlpro.developpez.com/SQL_AZ_2.html#SELECT_operateurs_null
Saulot a écrit:
Bonjour,
j'ai une table d'historique dans laquelle je stocke une requete SQL
d'insertion lorsque je supprime un enregistrement. (ca me permet de faire un
rollback)
Mon pb, c que le trigger refuse de s'enclencher dès qu'une Valeur Null
apparait dans une des colonnes. (qui autorise le Null bien entendu).
Dans l'exemple ci-dessous : la variable @Request me sert à stocker
l'instruction SQL.
Je convertit toutes les données Non Varchar en varchar.
Dans mon test, la variable @cPropositionMaitre est NULL... Cette valeur fait
foirer l'instanciation de la variable @Request qui se retrouve à Null elle
aussi.
Quand il tente d'inserer cette valeur dans ma table d'historique, ca plante
parce que la colonne SupInsert qui stocke le SQL n'accepte pas le Null.
Help please :(
*************
CREATE TRIGGER TPropositionsDelete ON dbo.TPropositions
FOR DELETE
AS
DECLARE @cProposition Varchar(50)
DECLARE @cQuestion Varchar(50)
DECLARE @cSociete Varchar(50)
DECLARE @cAuteur Varchar(50)
DECLARE @OrdreProposition Numeric
DECLARE @Archiver Bit
DECLARE @PropositionValide Bit
DECLARE @NbrPoint Float
DECLARE @IISACreate Bit
DECLARE @cPropositionMaitre Varchar(50)
DECLARE @DateCreate DateTime
DECLARE @DateEdit DateTime
DECLARE @Request Varchar(5000)
DECLARE MyCurseur CURSOR FOR SELECT * FROM Deleted
OPEN MyCurseur
FETCH NEXT FROM MyCurseur INTO
@cProposition,@cQuestion,@cSociete,@cAuteur,@OrdreProposition,@Archiver,@Pro
positionValide,@NbrPoint,@IISACreate,@cPropositionMaitre,@DateCreate,@DateEd
it
IF @@FETCH_STATUS = 0
BEGIN
WHILE @@FETCH_STATUS=0
BEGIN
Select @Request='INSERT INTO TPropositions VALUES (''' + @cProposition +
''',''' + @cQuestion + ''',''' + @cSociete + ''',''' + @cAuteur + ''',' +
CONVERT(Varchar(20),@OrdreProposition) + ',''' +
CONVERT(Varchar(20),@Archiver) + ',' +
CONVERT(Varchar(20),@PropositionValide) + ',' +
CONVERT(Varchar(20),@NbrPoint) + ',' + CONVERT(Varchar(20),@IISACreate) +
',''' + @cPropositionMaitre + ''',''' + CONVERT(Varchar(20),@DateCreate) +
''',''' + CONVERT(Varchar(20),@DateEdit) + ''')'
INSERT INTO TSuppressions
VALUES('TPropositions',@cProposition,@Request,current_timestamp)
FETCH NEXT FROM MyCurseur INTO
@cProposition,@cQuestion,@cSociete,@cAuteur,@OrdreProposition,@Archiver,@Pro
positionValide,@NbrPoint,@IISACreate,@cPropositionMaitre,@DateCreate,@DateEd
it
END
END
CLOSE MyCurseur
DEALLOCATE MyCurseur
--Une première correction du code :
DECLARE MyCurseur CURSOR
FOR
SELECT *
FROM Deleted
OPEN MyCurseur
FETCH NEXT FROM MyCurseur
INTO @cProposition, @cQuestion, @cSociete,
@cAuteur,@OrdreProposition, @Archiver,
@PropositionValide, @NbrPoint, @IISACreate,
@cPropositionMaitre, @DateCreate, @DateEdit
INSERT INTO TSuppressions
VALUES('TPropositions',@cProposition,@Request,current_timestamp)
FETCH NEXT FROM MyCurseur
INTO @cProposition, @cQuestion, @cSociete,
@cAuteur,@OrdreProposition, @Archiver,
@PropositionValide, @NbrPoint, @IISACreate,
@cPropositionMaitre, @DateCreate, @DateEdit
END
CLOSE MyCurseur
DEALLOCATE MyCurseur
/**************************
Il faudrait vérifier en faisant cela dans une SP avec un PRINT de @Request si le
COALESCE avec NULL des dates est OK...
A +
--
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 *************************
Chose fondamentale à comprendre : *NULL n'est pas une valeur, c'est au contraire l'absence de valeur* A lire : http://sqlpro.developpez.com/SQL_AZ_E.html#NULL
Donc, utiliser un convertisseur permettant de passer du marqueur MULL à une valeur déterminée, comme COALESCE par exemple. A lire : http://sqlpro.developpez.com/SQL_AZ_2.html#SELECT_operateurs_null
Saulot a écrit:
Bonjour, j'ai une table d'historique dans laquelle je stocke une requete SQL d'insertion lorsque je supprime un enregistrement. (ca me permet de faire un rollback) Mon pb, c que le trigger refuse de s'enclencher dès qu'une Valeur Null apparait dans une des colonnes. (qui autorise le Null bien entendu). Dans l'exemple ci-dessous : la variable @Request me sert à stocker l'instruction SQL. Je convertit toutes les données Non Varchar en varchar.
Dans mon test, la variable @cPropositionMaitre est NULL... Cette valeur fait foirer l'instanciation de la variable @Request qui se retrouve à Null elle aussi. Quand il tente d'inserer cette valeur dans ma table d'historique, ca plante parce que la colonne SupInsert qui stocke le SQL n'accepte pas le Null.
Help please :(
************* CREATE TRIGGER TPropositionsDelete ON dbo.TPropositions FOR DELETE AS DECLARE @cProposition Varchar(50) DECLARE @cQuestion Varchar(50) DECLARE @cSociete Varchar(50) DECLARE @cAuteur Varchar(50) DECLARE @OrdreProposition Numeric DECLARE @Archiver Bit DECLARE @PropositionValide Bit DECLARE @NbrPoint Float DECLARE @IISACreate Bit DECLARE @cPropositionMaitre Varchar(50) DECLARE @DateCreate DateTime DECLARE @DateEdit DateTime
DECLARE @Request Varchar(5000)
DECLARE MyCurseur CURSOR FOR SELECT * FROM Deleted
OPEN MyCurseur FETCH NEXT FROM MyCurseur INTO @cProposition,@cQuestion,@cSociete,@cAuteur,@OrdreProposition,@Archiver,@Pro positionValide,@NbrPoint,@IISACreate,@cPropositionMaitre,@DateCreate,@DateEd it IF @@FETCH_STATUS = 0 BEGIN WHILE @@FETCH_STATUS=0 BEGIN Select @Request='INSERT INTO TPropositions VALUES (''' + @cProposition + ''',''' + @cQuestion + ''',''' + @cSociete + ''',''' + @cAuteur + ''',' + CONVERT(Varchar(20),@OrdreProposition) + ',''' + CONVERT(Varchar(20),@Archiver) + ',' + CONVERT(Varchar(20),@PropositionValide) + ',' + CONVERT(Varchar(20),@NbrPoint) + ',' + CONVERT(Varchar(20),@IISACreate) + ',''' + @cPropositionMaitre + ''',''' + CONVERT(Varchar(20),@DateCreate) + ''',''' + CONVERT(Varchar(20),@DateEdit) + ''')'
INSERT INTO TSuppressions VALUES('TPropositions',@cProposition,@Request,current_timestamp) FETCH NEXT FROM MyCurseur INTO @cProposition,@cQuestion,@cSociete,@cAuteur,@OrdreProposition,@Archiver,@Pro positionValide,@NbrPoint,@IISACreate,@cPropositionMaitre,@DateCreate,@DateEd it END END
CLOSE MyCurseur DEALLOCATE MyCurseur
--Une première correction du code :
DECLARE MyCurseur CURSOR FOR SELECT * FROM Deleted
OPEN MyCurseur
FETCH NEXT FROM MyCurseur INTO @cProposition, @cQuestion, @cSociete, @cAuteur,@OrdreProposition, @Archiver, @PropositionValide, @NbrPoint, @IISACreate, @cPropositionMaitre, @DateCreate, @DateEdit
INSERT INTO TSuppressions VALUES('TPropositions',@cProposition,@Request,current_timestamp)
FETCH NEXT FROM MyCurseur INTO @cProposition, @cQuestion, @cSociete, @cAuteur,@OrdreProposition, @Archiver, @PropositionValide, @NbrPoint, @IISACreate, @cPropositionMaitre, @DateCreate, @DateEdit END
CLOSE MyCurseur
DEALLOCATE MyCurseur
/**************************
Il faudrait vérifier en faisant cela dans une SP avec un PRINT de @Request si le COALESCE avec NULL des dates est OK...
A +
-- 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 *************************