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 :

Split sur une variable de type TEXT (vs nvarchar)


Sujet :

MS SQL Server

  1. #1
    Membre régulier Avatar de AliJava
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 184
    Points : 82
    Points
    82
    Par défaut Split sur une variable de type TEXT (vs nvarchar)
    Bonjour,
    J'essaye de faire un split sur un text mais ca ne marche pas ce code que j'ai ecris pour un type nvarchar ne fonctionne pas sur un type TEXT ce qui normal mais je ne vois d'ou ca vient, voici le code qui marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Begin
    Declare @Cnt int
    Declare @Text nvarchar(100)
    SET @Text = '9999:2222:3333:4444:5555'
    SET @Cnt = 1
    While (Charindex(':',@Text) > 0) -- tant qu'il ya des positions de ':'
    begin
    print ltrim(rtrim(Substring(@Text,1,(charindex(':',@Text)-1))))
    set @Text = substring(@Text,Charindex(':',@Text)+1,datalength(@Text))
    Set @Cnt = @Cnt + 1
    end
    print ltrim(rtrim(@Text)) 
    end
    Quand je change le type en TEXT, j'ai l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Server: Msg 2739, Level 16, State 1, Line 2
    The text, ntext, and image data types are invalid for local variables.
    malgré que je change la fonction len en datalength comme j'ai dans plusieurs exemple par rapport au parsing d'un text cvs mais je ne vois toujours pas le probleme.
    Peut etre je dois faire un convert ?

    Je vous remercie d'avance de votre aide.
    AA
    ..::: aa du bocal ..:::
    Il nous faut deux ans pour apprendre à parler et toute une vie pour apprendre se taire.
    N'oublier surtout pas de ne pas poster la réponse même si on vous a pas aidé

  2. #2
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 34
    Points : 30
    Points
    30
    Par défaut
    Ce marche pour moi!

  3. #3
    Membre régulier Avatar de AliJava
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 184
    Points : 82
    Points
    82
    Par défaut
    oui le code que j'ai posté fonctionne avec "Declare @Text nvarchar(100)"
    mais mon souci c'est de remplacer Declare @Text nvarchar(100) par Declare @Text TEXT

    donc c'est le changement de type qui me pose probleme

    Merci encore.
    ..::: aa du bocal ..:::
    Il nous faut deux ans pour apprendre à parler et toute une vie pour apprendre se taire.
    N'oublier surtout pas de ne pas poster la réponse même si on vous a pas aidé

  4. #4
    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 : 42
    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
    Bonsoir,

    Il n'est effectivement pas possible de déclarer une variable de type TEXT, parce que c'est un LOB. Vous pouvez en revanche l'utiliser dans les colonnes

    Vous pouvez cependant déclarer une variable de type VARCHAR(MAX) ou NVARCHAR(MAX) qui vous autorisera à stocker respectivement 2.147.483.647 et 1 073 741 823 de caractères

  5. #5
    Membre régulier Avatar de AliJava
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 184
    Points : 82
    Points
    82
    Par défaut
    Bonsoir,

    Et bien au fait, c'est pas que je veux pas le faire avec varchar (la preuve que j'ai fait quelques qui fonctionne) mais la contrainte au niveau du shema ne m'autorise pas de faire un autre choix.
    Je pose le problème autrement, comment puis je travailler sur une varibale de type TEXT pour pouvoir faire des split selon un Delimitor, en gros c'est une fonction qui prend un texte (type TEXT) et un délimiteur (char(1)) en paramètres qui renvoie une table de mots.

    voila

    Je vous remercie tous.
    ..::: aa du bocal ..:::
    Il nous faut deux ans pour apprendre à parler et toute une vie pour apprendre se taire.
    N'oublier surtout pas de ne pas poster la réponse même si on vous a pas aidé

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 356
    Points : 406
    Points
    406
    Par défaut
    Bonjour,

    je travaille sous SQL Server 2000 et j'ai été confronté à ce type de problème. Il me semble qu'au niveau des procédures stockées SQL Server, on a la possibilité de passer une variable de type TEXT en entrée d'une PS.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    CREATE PROCEDURE USP_SPLIT
    @TEXTE_ENTREE TEXT,
    @SEPARATEUR CHAR(1)
     
    AS 
    -- Code de traitement 
     
     
    GO
    Dans mon cas cela fonctionne, après je ne sais pas si cette méthode est recommandée.
    Bon courage pour la suite.

  7. #7
    Membre régulier Avatar de AliJava
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 184
    Points : 82
    Points
    82
    Par défaut
    Merci de m'avoir repondu.
    C'est a dire si je mets en parametres le TEXT dans ma fonction je n'aurais pas a modifier le code ci-dessus ?

    Merci
    ..::: aa du bocal ..:::
    Il nous faut deux ans pour apprendre à parler et toute une vie pour apprendre se taire.
    N'oublier surtout pas de ne pas poster la réponse même si on vous a pas aidé

  8. #8
    Membre régulier Avatar de AliJava
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 184
    Points : 82
    Points
    82
    Par défaut
    Bonsoir,
    bon je crois que je vais abandonée cette fonction parceque la je ne comprend plus pourquoi les memes fonctions ne sont pas compatbile avec le type text, voici le code de la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    CREATE FUNCTION f_split_text (@Text TEXT)
    RETURNS @result TABLE
    (
    	token int
    )
    AS
    BEGIN
    	BEGIN
    		DECLARE @Cnt int
    		SET @Cnt = 1
    		WHILE (Charindex(':',@Text) > 0) 
    		INSERT @result SELECT (ltrim(rtrim(Substring(@Text,1,(charindex(':',@Text)-1)))))
    		SET @Text = substring(@Text,Charindex(':',@Text)+1,datalength(@Text))
    		SET @Cnt = @Cnt + 1
    	END
    	INSERT @result SELECT (ltrim(rtrim(@Text)))
    	RETURN 
    END
    GO
    pourriez vous m'aider ou me dire comment il faut s'y prendre SVP

    Merci beaucoup
    ..::: aa du bocal ..:::
    Il nous faut deux ans pour apprendre à parler et toute une vie pour apprendre se taire.
    N'oublier surtout pas de ne pas poster la réponse même si on vous a pas aidé

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 356
    Points : 406
    Points
    406
    Par défaut
    Bonjour,

    Le code exemple que je vous ai transmis prend en compte l'utilisation d'un procédure stockée. D'autre part, je ne sais pas si les fonctions chaînes de caractères peuvent permettre le traitement des paramètres de type TEXT.
    Bon courage pour la suite.

  10. #10
    Membre régulier Avatar de AliJava
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 184
    Points : 82
    Points
    82
    Par défaut
    Merci pour vos réponse au cas ou quelqu'un d'autres passe par là, voici quelques liens utiles pour spliter une variable de type TEXT :
    http://weblogs.sqlteam.com/davidm/ar...12/12/655.aspx
    Et
    http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=50648

    Merci beaucoup à tous.

    Function vs Procedure.
    ..::: aa du bocal ..:::
    Il nous faut deux ans pour apprendre à parler et toute une vie pour apprendre se taire.
    N'oublier surtout pas de ne pas poster la réponse même si on vous a pas aidé

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 31/03/2011, 08h55
  2. Précision sur une variable de type Number
    Par Proggies dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 29/05/2010, 19h08
  3. ré-initialiser un identity sur une variable de type table
    Par laurent-devel dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 31/03/2008, 19h39
  4. Réponses: 6
    Dernier message: 14/02/2007, 21h08
  5. Boucle sur une variable de type "heure"
    Par Charles25 dans le forum ASP
    Réponses: 3
    Dernier message: 15/11/2006, 17h51

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