OVH Cloud OVH Cloud

Pb de Syntaxe & Null

6 réponses
Avatar
Saulot
Bonjour,
j'aimerais avoir vos conseils pour palier au probleme suivant :
Dans un trigger sur le delete, je genere un string sql correspondant à
l'insert du record supprimé (pour un rollback)
Mon prbleme se produit lorsque je tente de convertir en varchar une colonne
de la table pour laquelle la valeur du record est Null

ex : CONVERT(Varchar(20),@DelaisPurge)
Si @DelaisPurge = Null.... il me plante à la conversion.

Comment puis-je palier au problème ?

Pour l'instant, je me contente de faire un test IF afin de remplacer la
valeur Null par ''.
Mais cette methode me pose probleme dans l'application en relation avec la
base.

Je me demandais juste s'il existait une autre alternative.

Merci de vos conseils.

6 réponses

Avatar
Jean-Nicolas BERGER
As-tu essayé de voir si un TRIGGER INSTEAD OF DELETE pouvait t'apporter qq
chose? (à partir de SQL2000)
JN.


"Saulot" a écrit dans le message de
news:40ee42b7$0$26343$
Bonjour,
j'aimerais avoir vos conseils pour palier au probleme suivant :
Dans un trigger sur le delete, je genere un string sql correspondant à
l'insert du record supprimé (pour un rollback)
Mon prbleme se produit lorsque je tente de convertir en varchar une


colonne
de la table pour laquelle la valeur du record est Null

ex : CONVERT(Varchar(20),@DelaisPurge)
Si @DelaisPurge = Null.... il me plante à la conversion.

Comment puis-je palier au problème ?

Pour l'instant, je me contente de faire un test IF afin de remplacer la
valeur Null par ''.
Mais cette methode me pose probleme dans l'application en relation avec la
base.

Je me demandais juste s'il existait une autre alternative.

Merci de vos conseils.




Avatar
Saulot
Bonjour,
vous pouvez m'expliquer en quoi cela consiste ?

"Jean-Nicolas BERGER" a écrit dans le
message de news:cclima$ch3$
As-tu essayé de voir si un TRIGGER INSTEAD OF DELETE pouvait t'apporter qq
chose? (à partir de SQL2000)
JN.


"Saulot" a écrit dans le message de
news:40ee42b7$0$26343$
> Bonjour,
> j'aimerais avoir vos conseils pour palier au probleme suivant :
> Dans un trigger sur le delete, je genere un string sql correspondant à
> l'insert du record supprimé (pour un rollback)
> Mon prbleme se produit lorsque je tente de convertir en varchar une
colonne
> de la table pour laquelle la valeur du record est Null
>
> ex : CONVERT(Varchar(20),@DelaisPurge)
> Si @DelaisPurge = Null.... il me plante à la conversion.
>
> Comment puis-je palier au problème ?
>
> Pour l'instant, je me contente de faire un test IF afin de remplacer la
> valeur Null par ''.
> Mais cette methode me pose probleme dans l'application en relation avec


la
> base.
>
> Je me demandais juste s'il existait une autre alternative.
>
> Merci de vos conseils.
>
>




Avatar
Patrice
Cela ne devrait pas poser problème :

SELECT CONVERT(VARCHAR(20),NULL) me donne bien NULL

(attention @DelaisPurge est une variable pas une colonne)

Le problème pourrait être lié à la façon dont est utilisé le résultat du
CONVERT (notamment il faut utiliser IS NULL et non pas =NULL) ???

Patrice

--

"Saulot" a écrit dans le message de
news:40ee42b7$0$26343$
Bonjour,
j'aimerais avoir vos conseils pour palier au probleme suivant :
Dans un trigger sur le delete, je genere un string sql correspondant à
l'insert du record supprimé (pour un rollback)
Mon prbleme se produit lorsque je tente de convertir en varchar une


colonne
de la table pour laquelle la valeur du record est Null

ex : CONVERT(Varchar(20),@DelaisPurge)
Si @DelaisPurge = Null.... il me plante à la conversion.

Comment puis-je palier au problème ?

Pour l'instant, je me contente de faire un test IF afin de remplacer la
valeur Null par ''.
Mais cette methode me pose probleme dans l'application en relation avec la
base.

Je me demandais juste s'il existait une autre alternative.

Merci de vos conseils.




Avatar
Bonjour,

L'option ANSI_NULLS doit être activée, dans ce cas il faut
comparer comme suit:
if @DelaisPurge is Null

Pour conserver l'ancienne syntaxe if @DelaisPurge = Null
il faut alors désactiver l'option ANSI_NULLS.

Cordialement,
LionelP

-----Message d'origine-----
Bonjour,
j'aimerais avoir vos conseils pour palier au probleme


suivant :
Dans un trigger sur le delete, je genere un string sql


correspondant à
l'insert du record supprimé (pour un rollback)
Mon prbleme se produit lorsque je tente de convertir en


varchar une colonne
de la table pour laquelle la valeur du record est Null

ex : CONVERT(Varchar(20),@DelaisPurge)
Si @DelaisPurge = Null.... il me plante à la conversion.

Comment puis-je palier au problème ?

Pour l'instant, je me contente de faire un test IF afin


de remplacer la
valeur Null par ''.
Mais cette methode me pose probleme dans l'application en


relation avec la
base.

Je me demandais juste s'il existait une autre alternative.

Merci de vos conseils.


.



Avatar
Fred BROUARD
il suffit d'utiliser la fonction normative COALESCE comme suit :

CAST(COALESCE(@DelaisPurge, 0) AS VARCHAR(20))

de même éviter le Convert, préférez le CAST normatif

A +

Saulot a écrit:
Bonjour,
j'aimerais avoir vos conseils pour palier au probleme suivant :
Dans un trigger sur le delete, je genere un string sql correspondant à
l'insert du record supprimé (pour un rollback)
Mon prbleme se produit lorsque je tente de convertir en varchar une colonne
de la table pour laquelle la valeur du record est Null

ex : CONVERT(Varchar(20),@DelaisPurge)
Si @DelaisPurge = Null.... il me plante à la conversion.

Comment puis-je palier au problème ?

Pour l'instant, je me contente de faire un test IF afin de remplacer la
valeur Null par ''.
Mais cette methode me pose probleme dans l'application en relation avec la
base.

Je me demandais juste s'il existait une autre alternative.

Merci de vos conseils.





--
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
Fred BROUARD
il suffit d'utiliser la fonction normative COALESCE comme suit :

CAST(COALESCE(@DelaisPurge, 0) AS VARCHAR(20))

de même éviter le Convert, préférez le CAST normatif

A +

Saulot a écrit:
Bonjour,
j'aimerais avoir vos conseils pour palier au probleme suivant :
Dans un trigger sur le delete, je genere un string sql correspondant à
l'insert du record supprimé (pour un rollback)
Mon prbleme se produit lorsque je tente de convertir en varchar une colonne
de la table pour laquelle la valeur du record est Null

ex : CONVERT(Varchar(20),@DelaisPurge)
Si @DelaisPurge = Null.... il me plante à la conversion.

Comment puis-je palier au problème ?

Pour l'instant, je me contente de faire un test IF afin de remplacer la
valeur Null par ''.
Mais cette methode me pose probleme dans l'application en relation avec la
base.

Je me demandais juste s'il existait une autre alternative.

Merci de vos conseils.





--
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 *************************