IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

SET ANSI_NULLS ON


Sujet :

MS SQL Server

  1. #1
    Nouveau membre du Club
    Inscrit en
    Octobre 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 35
    Points : 28
    Points
    28
    Par défaut SET ANSI_NULLS ON
    Bonjour,
    je suis dans un projet, où je vois que dans les procédures stockés nos développeurs utilisent parfois SET ANSI_NULLS ON et parfois SET ANSI_NULLS OFF. Je vois pourquoi. Le problème est que sur msdn msdn. On peut lire sur cettte fonctionnalité :
    Résumé :

    Cette fonctionnalité sera supprimée dans une prochaine version de Microsoft SQL Server. Évitez d'utiliser cette fonctionnalité dans de nouveaux travaux de développement, et prévoyez de modifier les applications qui utilisent actuellement cette fonctionnalité.
    par contre il ne mette pas de recommandation ?
    ni sur le fait que si il enleve cette fonctionnalité que se passe t'il ?
    il l'enleve au profit du OFF ou ON ?
    Comment faites vos pour la problematique des nulls ??
    J'ai vu que l'on pouvait utiliser ISNULL.

    Pour rappeller on men ON, null = null renvoie UNKNOW et non pas true.

    Par avance merci

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 736
    Points : 52 447
    Points
    52 447
    Billets dans le blog
    5
    Par défaut
    Mettre ANSI NULL OFF signifie : je ne veut pas que mes NULL respecte la norme SQL. C'est une abération et cela ne peut conduire qu'à des résultats douteux à faux.

    Il est impératif de respecter ANSI NULL ON si vous voulez un code correct.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Nouveau membre du Club
    Inscrit en
    Octobre 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 35
    Points : 28
    Points
    28
    Par défaut
    donc si je mets à ON
    on a NULL = NULL renvoie UNKNOW
    Cela ne me plait, comment gérer vous cela ?
    via le ISNULL
    Le probleme j'ai des requetes.
    SELECT toto FROM tata WHERE PARENT= @monPARENT.
    Vu que le champ PARENT peut etre null.
    Si je passe ma requete avec @monPARENT = null.
    Il me renvoie rien
    Faut il que je fasse :
    SELECT toto FROM tata WHERE PARENT= ISNULL(@monPARENT,-1)
    ou il y a t'il une notre méthode plus satisfaisante....

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 736
    Points : 52 447
    Points
    52 447
    Billets dans le blog
    5
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     	 donc si je mets à ON
    on a NULL = NULL renvoie UNKNOW
    Cela ne me plait, comment gérer vous cela ?
    Il ne me plait pas non plus de m'arrêter au feu rouge...

    Commencez par lire la papier que j'ai écrit sur le traitement des NULLs :
    http://sqlpro.developpez.com/cours/null/

    Ensuite vous verrez que vous pouvez utiliser COALESCE ou CASE de façon intelligente...

    Pourquoi pas par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT toto 
    FROM tata 
    WHERE PARENT= COALESCE(@monPARENT, PARENT)
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Nouveau membre du Club
    Inscrit en
    Octobre 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 35
    Points : 28
    Points
    28
    Par défaut
    ton truc me pose probleme :
    SELECT toto
    FROM tata
    WHERE PARENT= COALESCE(@monPARENT, PARENT)
    Si je comprends bien, cela renvoie tout si @monPARENT est null.
    Si @monPARENT et PARENT sont nulles, on se retrouve avec UNKNOW.
    Pour quoi tu ne proposes pas un truc
    SELECT toto
    FROM tata
    WHERE COALESCE(PARENT,-1) = COALESCE(@monPARENT, -1)
    ????

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 736
    Points : 52 447
    Points
    52 447
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    qui vous assure qu'un PARENT -1 n'existe pas ?
    Aujourd'hui ???
    et dans 10 ans ?????????

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  7. #7
    Nouveau membre du Club
    Inscrit en
    Octobre 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 35
    Points : 28
    Points
    28
    Par défaut
    Je suis d'accord sur le fond, mais nous sommes d'accord que
    SELECT toto
    FROM tata
    WHERE PARENT= COALESCE(@monPARENT, PARENT)
    Ne renvoie pas le résultat désiré ?
    Quelle est la bonne requete ? Celle-la
    SELECT toto
    FROM tata
    WHERE (((PARENT IS NULL) AND (@monParent IS NULL))
    OR (PARENT = @monPARENT))

  8. #8
    Nouveau membre du Club
    Inscrit en
    Octobre 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 35
    Points : 28
    Points
    28
    Par défaut
    SELECT toto
    FROM tata
    WHERE (((PARENT IS NULL) AND (@monParent IS NULL))
    OR (PARENT = @monPARENT))
    Est ce que ma requete est bonne ??

Discussions similaires

  1. set ansi_nulls, quoted_identifier... on
    Par olivc dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 01/06/2005, 12h32
  2. set term ^
    Par tux dans le forum Débuter
    Réponses: 8
    Dernier message: 12/10/2004, 21h42
  3. IB 6.0.1 - Win XP - Character Set
    Par SuperTotor dans le forum InterBase
    Réponses: 4
    Dernier message: 03/06/2003, 21h25
  4. Query data set
    Par Sandra dans le forum JBuilder
    Réponses: 3
    Dernier message: 20/01/2003, 11h08
  5. character set // Nls_lang
    Par fopicht dans le forum Oracle
    Réponses: 2
    Dernier message: 23/05/2002, 13h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo