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 :

Exécuter une requete enregistrée dans un champ


Sujet :

MS SQL Server

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2002
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 52
    Points : 36
    Points
    36
    Par défaut Exécuter une requete enregistrée dans un champ
    Bonjour, mon problème est simple et pourtant assez compliqué pour que je n'y arrive pas.
    J'ai un champ (type Text) dans ma base qui contient un ensemble de requete. Je voudrais executer ce qu'il y a dans le champ. J'ai essayé des trucs dans le genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXEC sp_executeSQL N'EXEC sp_executeSQL N''SELECT MonChp FROM MaTable'''
    Mais ca n'exécute pas la requete contenue dans le champ. Comme mon champ est de type Text, je ne peux pas faire de variable locale. Comment puis-je faire? Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 224
    Points : 19 566
    Points
    19 566
    Billets dans le blog
    25
    Par défaut
    Eviter le type TEXT, surtout si c'est pour reprendre dans du code sql.
    Eviter l'utilisation massive de sql dynamique
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juin 2002
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 52
    Points : 36
    Points
    36
    Par défaut
    je suis obligé d'utiliser le type Text...je mettrais des requetes de 30000 caractères dedans !!!
    Mais je suis ouvert à toutes les solutions...proposez moi

  4. #4
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 425
    Points : 358
    Points
    358
    Par défaut
    Citation Envoyé par pascalT
    je suis obligé d'utiliser le type Text...je mettrais des requetes de 30000 caractères dedans !!!
    Mais je suis ouvert à toutes les solutions...proposez moi
    Une question peut être bête: Est il possible d'utiliser Varchar(30000)?
    OS:Win 2000 Pro, WIN XP
    SGBD: MS Sql Server, Oracle
    Environnement: VS.NET 2002, JBuilder
    Web: www.ndestudents.com

  5. #5
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    d'après le lien suivant : http://www.issociate.de/board/index.php?t=msg&goto=443235&rid=0#msg_443235

    Il semblerait qu'il faille passer par plusieurs variables avec une boucle qui va affecter les sous-chaînes de la requête à chacune des variables...

    bon courage

  6. #6
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    Un exemple "à la barbare"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
       declare @req1 varchar(8000)
       declare @req2 varchar(8000)
       declare @req3 varchar(8000)
       declare @req4 varchar(8000)
       declare @req5 varchar(8000)
       --SET @req1 = 'SELECT req FROM orafrance'
       SELECT @req1= SUBSTRING(req,1,8000),
    	  @req2 =SUBSTRING(req,8001,8000),
    	  @req3 =SUBSTRING(req,16001,8000),
    	  @req4 =SUBSTRING(req,24001,8000),
    	  @req5 =SUBSTRING(req,32001,8000)
         FROM table_requests
       exec(@req1+@req2+@req3+@req4+@req5)
    où table_requests contient les requêtes

  7. #7
    Futur Membre du Club
    Inscrit en
    Avril 2002
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 7
    Points : 8
    Points
    8
    Par défaut ze reponse is
    Bonojour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    declare @champ_requete text
    select @champ_requete=champ_requete from la table 
    exec (@champ_requete)

    voila, essaye comme ça

    BONO

  8. #8
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    On ne peut pas déclarer une variable de type TEXT... sinon évidemment que ce serait simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    declare @champ_requete text
    Serveur : Msg 2739, Niveau 16, État 1, Ligne 1
    Les types de données text, ntext et image sont interdits dans les variables locales.

  9. #9
    Nouveau membre du Club
    Inscrit en
    Juin 2002
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 52
    Points : 36
    Points
    36
    Par défaut
    ouaip, pas de possibilité de faire de variable de type Text...et quand à faire des varables de type varchar(8000), ben c'est pas trop possible non plus...genre si ca tombe au beau milieu d'une requete, je ne peux pas découper à 8000 caractères !!!
    J'ai trouvé une solution temporaire pour l'instant, mais ca deviendra surement définitif :
    - le poste client recopie l'ensemble de requetes dans un champ de la base (type Text)
    - j'exporte ce champ dans un fichier sur le serveur (commande "bcp")
    - et ensuite, j'exécute le fichier avec la commande "osql"
    Dites moi ce que vous en pensez. :

  10. #10
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    Citation Envoyé par pascalT
    ouaip, pas de possibilité de faire de variable de type Text...et quand à faire des varables de type varchar(8000), ben c'est pas trop possible non plus...genre si ca tombe au beau milieu d'une requete, je peux pas decouper à 8000 caractères
    et pourquoi donc ?

    Le but est de transformer un text en 5 varchar(8000)... peu importe comment c'est découpé puisqu'au bout du compte on concaténe tout

    En revanche, ce qu'il faut voir c'est si 40000 caractères suffisent

  11. #11
    Nouveau membre du Club
    Inscrit en
    Juin 2002
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 52
    Points : 36
    Points
    36
    Par défaut
    arf oui...j'avais pas bien lu
    effectivement, ca amrcherait comme ca. et pour le bon nombre de variables temporaires, ca pose pas de problème, ce serait moi qui créerait tout ca avec la taille de l'ensemble de requetes !!!

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

Discussions similaires

  1. [SQL Server 2000]Executer une requete contenue dans un champ
    Par hwoarang dans le forum Développement
    Réponses: 4
    Dernier message: 25/11/2009, 17h23
  2. Probleme avec une requete sql dans VB6 pour un champ date
    Par jacko842 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 27/01/2009, 08h31
  3. enregistrement dans 2 champs d'une table
    Par jeanfi77 dans le forum Administration
    Réponses: 2
    Dernier message: 19/03/2007, 11h41
  4. Réponses: 10
    Dernier message: 23/11/2006, 12h55
  5. [VB6] exécution d'une requete Insert dans oracle 9.2
    Par krest dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 21/04/2006, 13h28

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