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 :

Erreur dans une procédure stockée avec table mémoire


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de Artylus
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13
    Par défaut Erreur dans une procédure stockée avec table mémoire
    Bonjour,
    Mon problème est le suivant, j'ai une procédure stockée qui me retourne une liste.
    La lecture du code sera plus claire qu'une explication... j'ai volontairement simplifié à l'extrême la procédure afin de mettre en évidence le problème.
    A l'exécution, la procédure retourne une erreur du type
    "La variable de table "@tblSearch" doit être déclarée."

    Existe t'il une solution pour évaluer une variable de type table dans un EXEC.
    Merci d'avance pour vos idées !

    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
    21
    22
    23
    24
    25
     
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER PROCEDURE [dbo].[TestSearch]
        @ch varchar(100)
    AS
    BEGIN
        SET NOCOUNT ON;
     
    declare @tblSearch TABLE (
    Id int NOT NULL)
     
    insert into @tblSearch select Id
    from Rech
    where Libelle like @ch+'%' COLLATE French_CI_AI
     
    -- ci dessous marche
    -- select * from @tblSearch 
     
    -- ci dessous ne marche pas 
    EXEC('select * from @tblSearch ')
     
    END

  2. #2
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    Bonsoir,

    En utilisant la commande EXEC votre variable de table n'est pas reconnu dans le contexte de cette commande.

    Vous pouvez par exemple encapsuler l'ensemble de votre requête dans une variable de type caractère et lancer la commande EXEC par la suite.

    Ex :

    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
    ALTER PROCEDURE [dbo].[TestSearch]
    @ch varchar(100)
    AS
    BEGIN
    SET NOCOUNT ON;
     
    DECLARE @sql VARCHAR(1000);
    SET @sql = '
    declare @tblSearch TABLE (
    Id int NOT NULL)
     
    insert into @tblSearch select Id
    from Rech
    where Libelle like @ch+''%'' COLLATE French_CI_AI'
     
    EXEC(@sql)
     
    END
    ++

  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 : 44
    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,

    Pensez plutôt à l'utilisation de la procédure stockée sp_executeSQL qui remplace avantageusement EXEC(@SQL), puisqu'elle permet la conservation des plans de requête.

    En ce qui concerne ce que vous appelez les tables mémoire, êtes-vous certain que de telles "variables" soient seulement stockées en RAM ?

    @++

  4. #4
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    Elsuket a raison ...

    Pour la peine ..

    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
     
    ALTER PROCEDURE [dbo].[TestSearch]
    @ch varchar(100)
    AS
    BEGIN
    SET NOCOUNT ON;
     
    DECLARE @sql VARCHAR(500);
    SET @sql = '
    declare @tblSearch TABLE (
    Id int NOT NULL)
     
    insert into @tblSearch select Id
    from Rech
    where Libelle like '' + @libelle + ''%'' COLLATE French_CI_AI'
     
    EXEC sp_executesql @sql, N'@libelle VARCHAR(100)',@ch
     
    END
    ++

  5. #5
    Membre averti Avatar de Artylus
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13
    Par défaut
    Bonjour,
    En effet tout cela laisse à réfléchir.
    Je vais regarder tout cela de plus prêt et je vous tiens au courant.
    Merci à tous

Discussions similaires

  1. passage d'un nom de table dans une procédure stockée
    Par thierry V dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 26/07/2010, 16h48
  2. Réponses: 0
    Dernier message: 07/04/2010, 16h39
  3. récupérer le code d'erreur dans une procédure stockée MYSQL
    Par zephira dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 05/07/2008, 07h01
  4. Renvoyer une erreur dans une procédure stockée
    Par SLt dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 18/04/2007, 18h41
  5. Comment lancer une erreur dans une procédure stockée
    Par borgfabr dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 17/05/2005, 17h06

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