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 :

[sql server 2005] must declare the scalar variable @ ?


Sujet :

MS SQL Server

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 94
    Points : 48
    Points
    48
    Par défaut [sql server 2005] must declare the scalar variable @ ?
    Bonjour,

    J'ai une appli VB6 qui tourne avec SQL 2005 et lorsque je fais des actions (ajout, mise à jour,...) via l'appli j'ai l'erreur
    [Microsoft][ODBC SQL Server Driver][SQL Server]Must declare the scalar variable "@champ_id"
    Alors qu'avec SQL 2000, je n'ai aucun problème. (J'utilise beaucoup de vues nommées avec un @.)
    C'est pourquoi je me dit que c'est peut etre un pb de configuration de SQL Server 2005 avec les @ mais je ne sais pas comment faire.

    Merci d'avance

  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 766
    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 766
    Points : 52 563
    Points
    52 563
    Billets dans le blog
    5
    Par défaut
    J'utilise beaucoup de vues nommées avec un @
    C'est là votre erreur. En effet @ est un tag qui indique à SQL Server une variable. Il est donc dans l'incapacité de comprendre votre requête car il tente de l'interpréter comme variable...

    En principe (norme SQL) il est interdit d'utiliser de tels caractères pour des noms d'objets (table, vue, colonnes, procédures stockées...). On ne doit utiliser que les 37 caractères suivants :
    A à Z, 0 à 9, et le blanc souligné. Pas d'accents, de blanc ni de signe de pontuation.
    L'utilisation de tout autre caractère peut engendrer des problèmes tels que le votre.

    Sachez que SQL est un langage fortement normalisé. Méconnaître la norme et s'engager sur des voies dangereuses ne peut conduire qu'à des problèmes. Même si par facilité certains éditeurs sont permissifs !

    Une solution de contournement consiste à délimiter ce nom par des crochet au titre du fait qu'il s'agit d'un identificateur non régulier...

    Voici un extrait de l'aide en ligne de MS :

    Règles pour identificateurs réguliers
    [...] les règles sont les suivantes :

    Le premier caractère doit être l'un des suivants :
    une des lettres définies par Unicode Standard 2.0. Elles incluent les caractères latins de a à z et de A à Z ainsi que des caractères alphabétiques d'autres langues.

    les symboles caractère de soulignement (_), « arobas » (@) ou numéro (#).

    Certains symboles au début d'un identificateur ont une signification particulière dans SQL Server. Un identificateur commençant par un « arobas » indique un paramètre ou une variable locale. Un identificateur commençant par un symbole numéro indique un objet temporaire (table ou procédure). Un identificateur commençant par le double signe # (##) indique un objet temporaire global.

    Le nom de certaines fonctions SQL Server commence par un double arobas (@@). Pour éviter toute confusion avec ces fonctions, il n'est pas recommandé d'utiliser des noms commençant par @@.

    Les caractères suivants peuvent être :
    des lettres définies dans Unicode Standard 2.0 ;

    des nombres décimaux de Basic Latin ou d'autres scripts nationaux ;

    Le caractère « arobas », le signe dollar ($), le symbole numéro ou le soulignement.
    L'identificateur ne doit pas être un mot réservé Transact-SQL. SQL Server réserve les versions majuscules et minuscules de ces mots.

    Les espaces intercalaires ou les caractères spéciaux ne sont pas autorisés.
    Un identificateur qui ne respecte pas toutes ces règles doit toujours être délimité par des guillemets ou des crochets lors de son utilisation dans une instruction Transact-SQL.
    Le mieux étant de modifier toute votre base pour supprimer ces arobas intempestifs.

    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
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 94
    Points : 48
    Points
    48
    Par défaut
    Le mieux étant de modifier toute votre base pour supprimer ces arobas intempestifs
    C'est justement ce que je ne veux aps faire.
    Je n'ai rencontré aucun pb avec SQL 2000.
    Comment en SQL 2005 ignorer ces règles pour les identificateurs ?

  4. #4
    Membre actif
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2007
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 193
    Points : 213
    Points
    213
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Une solution de contournement consiste à délimiter ce nom par des crochet au titre du fait qu'il s'agit d'un identificateur non régulier...
    Ca ne marche pas avec des crochets?

    Ma question serait plutot, comment est-ce que ça marchait en 2000
    Fabian M. - DBA Sql server 2008R2.
    Apprenti Admin Système 2008 R2
    Développeur SSRS, SQL
    Développement C# en hobby

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 94
    Points : 48
    Points
    48
    Par défaut
    Ma base comprend des vues du style VU@TABLE@U1, ....
    et mon appli VB6 avec SQL 2000 marche sans pb (mise à jour des vues,...)

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 94
    Points : 48
    Points
    48
    Par défaut
    Je viens de me rendre compte que les fonctionnalités de mon appli qui me renvoient une erreur sont celles qui souhaitent mettre à jour les tables de ma base qui ont un trigger.
    Y-a-t-il une configuration spécifique pour les triggers dans sql 2005?

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 766
    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 766
    Points : 52 563
    Points
    52 563
    Billets dans le blog
    5
    Par défaut
    Vous vous enferrez dans un problème qui ne pourra pas être solutionné sans que vos ôtiez vos arobase intempestifs.

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

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 98
    Points : 91
    Points
    91
    Par défaut
    Bonjour,

    je ne comprends pas bien le principe de fonctionnement des scalar variables @xyz ?
    Quel est l'intérêt par rapport à une variable classique pour construire une requête ?

    Je n'ai pas trouvé grand chose sur le net donc si vous aviez un lien vers un tuto ou un cours à me passer, je suis preneur.
    Merci d'avance,

    un débutant en SQL Server.

    à+

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

Discussions similaires

  1. error "must declare the scalar variable "@codemodule"
    Par AngeAbstraction dans le forum VB.NET
    Réponses: 4
    Dernier message: 11/04/2012, 20h34
  2. Erreur "Must declare the scalar variable "@id"
    Par Devlin111 dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 15/03/2012, 12h26
  3. Réponses: 1
    Dernier message: 20/05/2009, 13h50
  4. Must Declare the scalare variable - Transact SQL
    Par xav13fr dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 31/07/2008, 10h41
  5. [SQL SERVER 2005] Probleme variable local
    Par nashouille dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 09/05/2006, 11h16

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