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

Développement SQL Server Discussion :

VARCHAR(MAX) selon SQL 2008 ou SQL 2005


Sujet :

Développement SQL Server

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2008
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2008
    Messages : 103
    Points : 87
    Points
    87
    Par défaut VARCHAR(MAX) selon SQL 2008 ou SQL 2005
    Bonjour,

    Je n'explique pas la différence de comportement entre SQL SERVER 2005 et 2008 :

    Sous 2005 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DECLARE @sql VARCHAR(MAX)
    SET @sql = 'toto '
    PRINT LEN(@sql)
    Donne 5.

    Sous 2008 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DECLARE @sql VARCHAR(MAX)
    SET @sql = 'toto '
    PRINT LEN(@sql)
    Donne 4.

    De plus si je passe ma VARCHAR de MAX à 8000 les deux versions retourne bien la même chose...

    J'ai rajouté SET ANSI_PADDING ON : idem.

    La seule chose qui semble influer est le fait de passer de MAX à autre chose pour ma VARCHAR !

    Quelqu'un a une idée ?

    Merci.

  2. #2
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 242
    Points
    4 242
    Par défaut
    C'est apparemment un problème connu : http://msdn.microsoft.com/en-us/libr...ql.105%29.aspx

    C'est bon à savoir. Dans les commentaires, il est fait mention d'une astuce pour ne plus avoir ce problème qui consiste à ajouté un caractère à la colonne lors du comptage et de soustraire 1 au résultat obtenu.

    Maintenant, j'imagine qu'il doit néanmoins y avoir une bonne raison à ce comportement.

  3. #3
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    ans les commentaires, il est fait mention d'une astuce pour ne plus avoir ce problème qui consiste à ajouté un caractère à la colonne lors du comptage et de soustraire 1 au résultat obtenu.
    C'est brutal ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    DECLARE @sql varchar(max)
    SET @sql = 'toto '
     
    SELECT	LEN(@sql)
    	, DATALENGTH(@sql)
    Retourne 4 | 5

    @++

  4. #4
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 242
    Points
    4 242
    Par défaut
    Ouais mais DATALENGTH va retourner le double de caractère si le champ est en caractère unicode non ?

    Du coup, la méthode "brutale" n'est-elle pas meilleure car plus générique ?

    Niveau performance, j'imagine que cela ne doit pas être trop gourmand d'ajouter un caractère mais étant novice, je peux me tromper ?

    Qu'en est-il réellement de l'avis des experts du forum ?

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2008
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2008
    Messages : 103
    Points : 87
    Points
    87
    Par défaut
    Avec la mise à jour vers SP 3 et SP 4 de SQL SERVER 2005, cela corrige le problème.

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. SQL 2008: Services SQL de demarre pas après un reboot
    Par gracouille dans le forum Administration
    Réponses: 17
    Dernier message: 24/11/2011, 00h06
  2. Réponses: 2
    Dernier message: 11/06/2010, 14h35
  3. Migration Sql 2000 vers sql 2008
    Par Palenf dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 06/05/2010, 21h09
  4. Migration base SQL 7 vers SQL 2008
    Par greg31500 dans le forum MS SQL Server
    Réponses: 16
    Dernier message: 10/09/2008, 18h17
  5. [SQL Server 8] fonction Max --- selon des conditions
    Par Baquardie dans le forum Langage SQL
    Réponses: 2
    Dernier message: 31/01/2006, 21h06

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