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 :

Question basique PRINT


Sujet :

MS SQL Server

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 181
    Par défaut Question basique PRINT
    Bonjour,
    Je suis tout nouveau dans le monde de SQL server et je n'arrive pas à comprendre pourquoi je ne peux pas afficher le moindre print sous MS SQL Server Management Studio 2005 lors de l'écriture d'une fonction en T-SQL:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    PRINT 'TEST';
    PRINT @SQL;
    PRINT 'SQL:' + @SQL;
    Lorsque j'exécute la fonction le message suivant s'affiche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Msg 443, Niveau 16, Etat 14, Procédure IMPORT_EXCEL_FILE, Ligne 17
    Utilisation non valide d'un opérateur présentant des effets secondaires ou d'un opérateur dépendant du temps 'PRINT' dans une fonction.
    PS: Je tiens à préciser que ma fonction fonctionne sans l'utilisation de PRINT mais bon je souhaite l'utiliser

    Merci par avance pour vos réponses.

    Cordialement,
    Daniel

  2. #2
    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
    Par défaut
    Bonjour DanaX,

    J'ai déjà eu cette erreur et je crois que c'est parce que votre @SQL contient GETDATE(), qui n'est pas déterministe.
    Avec PRINT, on ne peut tracer que des constantes.
    Si ce n'est pas le cas, pourriez-vous poster votre commande @SQL ?

  3. #3
    Membre Expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 797
    Par défaut
    Quel est le contenu de la variable @SQL ?

    Petite info en passant : le ; n'est pas obligatoire après l'instruction PRINT.

  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 : 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
    Par défaut
    Bonjour,

    En fait il ne l'est derrière aucune instruction, pour l'instant ...
    En revanche il l'est devant certaines, comme WITH [ExpressionDeTableCommune].

    Quand sera-t-il obligatoire ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 181
    Par défaut
    Citation Envoyé par cavo789 Voir le message
    Quel est le contenu de la variable @SQL ?

    Petite info en passant : le ; n'est pas obligatoire après l'instruction PRINT.
    Il contient une requête sous la forme de caractère mais je rencontre même le problème si j'affiche

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    381
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 381
    Par défaut
    Bonjour,

    on ne peut tout simplement pas utiliser PRINT (de meme que EXEC et autres joyeusetés je crois) dans une fonction.
    Je te conseille de sortir ton code de la fonction pour le debugger.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 181
    Par défaut
    Citation Envoyé par nox75 Voir le message
    Bonjour,

    on ne peut tout simplement pas utiliser PRINT (de meme que EXEC et autres joyeusetés je crois) dans une fonction.
    Je te conseille de sortir ton code de la fonction pour le debugger.
    Le EXEC ne semble pas poser de problème lors de l'exécution mais je trouve cela un peu débile!!!!
    En même temps, j'ai été obliger d'utiliser cette base alors que postgresql aurait été plus intéressant

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    381
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 381
    Par défaut
    Oui, pardon, c'est le EXECUTE (string) qui pose le meme probleme me semble-t-il. En tout cas je sais qu'on est plus limité dans une fonction. J'ai eu pas mal de soucis du meme genre. getdate() y est interdit par exemple.

    En l'occurence ca n'est pas tres bloquant, ca ne pose en général pas trop de probleme de debugger hors fonction (à la barbare quoi, en copiant collant le code et en l'executant).

  9. #9
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 986
    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 986
    Billets dans le blog
    6
    Par défaut
    Les fonctions SQL (UDF) ont la nécéssité d'être utilisées dans une requête SQL. Elle ne peuevtn pas conséquente être exécutée en dehors de ce contexte. Dès lors tout ce qui n'est pas un retour saclaire pour une fonction scalaire et un retour table pour un fonction table est interdit.
    De même pour les manipulation SQL.

    Comme j'ai déjà eut l'occasion de le dire ici : http://www.developpez.net/forums/d61...xpress-2005-a/

    "
    Une fonction (ou UDF, user Define Fonction) est un programme destiné à fournir en sortie, une valeur scalaire ou une table (SELECT).
    Les fonctions scalaires ne peuvent pas contenir :

    * de transaction,
    * de sql dynamique
    * d'ordre de mise à jour (INSERT, UPDATE, DELETE)
    * d'ordre DDL (CREATE, ALTER, DROP), DCL (GRANT REVOKE)
    * un appel à une procédure
    * l'utilisation d'un cursor

    Une fonction table peut contenir des ordres de mise à jour, mais uniquement sur la table en sortie.

    Une fonction se crée par CREATE FUNCTION et si vous le souhaitez vous pouvez la placer dans un schéma SQL particulier que vous aurez préalablement créé.

    "
    Bien entendu le PRINT fait aussi partie des choses interdites dans les fonctions !

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

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    381
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 381
    Par défaut
    Merci SQLpro pour ces éclaircissement

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 181
    Par défaut
    Merci pour ces précisions le problème étant que je ne fais que commencer dans le monde de SQL server à la base je viens plutôt du monde PostGreSQL et MySQL et ces notions sont inexistantes

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

Discussions similaires

  1. Question basique (sdl)
    Par insomniak dans le forum SDL
    Réponses: 2
    Dernier message: 24/10/2005, 18h03
  2. Question Basique Gestion Erreur VBA ...
    Par Le_Phasme dans le forum Access
    Réponses: 2
    Dernier message: 11/10/2005, 13h42
  3. Question basique
    Par PatLeOuf dans le forum C++
    Réponses: 1
    Dernier message: 23/03/2005, 10h57
  4. Réponses: 5
    Dernier message: 04/03/2005, 12h14

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