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 :

Passer une table en paramètre à l'aide d'un curseur


Sujet :

MS SQL Server

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 31
    Points : 24
    Points
    24
    Par défaut Passer une table en paramètre à l'aide d'un curseur
    Bonjour,
    J'ai dans une table, la liste de plusieurs tables dans une colonne prName
    Je souhaite à l'aide d'un curseur parcourir cette liste et faire un select sur chacune de ces tables que je passe en paramètre.
    Voici le code que j'utilise :


    [
    DECLARE projet_cursor CURSOR FOR
    select prName
    from BPROJ.dbo.prCounter
    DECLARE @PRName varchar(20)
    OPEN projet_cursor

    FETCH NEXT FROM projet_cursor INTO @PRName

    WHILE @@FETCH_STATUS <> -1
    BEGIN
    DECLARE @PRName2 varchar(20)
    print @PRName
    select max(prid) from @PRName
    FETCH NEXT FROM projet_cursor INTO @PRName
    END

    CLOSE projet_cursor
    DEALLOCATE projet_cursor
    ]

    J'ai le message suivant : la variable @prName doit être déclarée
    Avez vous une idée ?

    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    Bonjour,

    C'était optimiste Pour utiliser une variable pour indiquer ton nom de table, tu dois faire du SQL dynamique (exécution d'une chaîne avec la fonction EXEC(), ou sp_executesql).

    Illustration ci-dessous avec une autre solution que passer par un curseur
    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
     
     
    CREATE TABLE prCounter (prName varchar(20))
    INSERT INTO prCounter
    SELECT 'sysobjects' UNION ALL
    SELECT 'syscomments' UNION ALL
    SELECT 'sysdepends'
     
    DECLARE @sql varchar(8000)
    SET @sql = ''
     
    UPDATE prCounter
    SET @sql = @sql + 'SELECT MAX(id) FROM ' + prName + '; '
     
    PRINT @sql
    EXEC (@sql)
     
    DROP TABLE prCounter
    Rudi Bruchez
    Rudi Bruchez EIRL, solutions MS SQL Server et NoSQL
    LinkedIn - [Outil libre de diagnostic SQL Server : Sql Trismegiste]
    LIVRES : Optimiser SQL Server -
    Microsoft SQL Server 2012 Security Cookbook
    - les bases de données NoSQL

    e-learning : LinkedIn Learning - Pluralsight

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 31
    Points : 24
    Points
    24
    Par défaut
    j'ai essayé mais cela ne fonctionne toujours pas ...
    Mon champs reste à 0 et n'est pas updaté.

  4. #4
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    désolé, je ne sais pas de quel champ, et de quel update tu parles.
    Rudi Bruchez
    Rudi Bruchez EIRL, solutions MS SQL Server et NoSQL
    LinkedIn - [Outil libre de diagnostic SQL Server : Sql Trismegiste]
    LIVRES : Optimiser SQL Server -
    Microsoft SQL Server 2012 Security Cookbook
    - les bases de données NoSQL

    e-learning : LinkedIn Learning - Pluralsight

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 31
    Points : 24
    Points
    24
    Par défaut
    Voici la solution grâce aux informations que tu m'as fournies En te remerciant pour ton aide :

    [
    DECLARE test_cursor CURSOR FOR
    select prName
    from BPROJ.dbo.prCounter
    DECLARE @PRName varchar(20)
    OPEN test_cursor

    FETCH NEXT FROM test_cursor INTO @PRName

    WHILE @@FETCH_STATUS <> -1
    BEGIN
    print @PRName

    exec( 'update prCounter set prLastID = (select max (prID) from ' + @prName +')Where prCounter.prName = '''+@prName+'''' )

    FETCH NEXT FROM test_cursor INTO @PRName
    END

    CLOSE test_cursor
    DEALLOCATE test_cursor ]

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

Discussions similaires

  1. [MySQL-5.1] Passer le nom d'une table en paramètre d'une procédure
    Par boubanet dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 08/06/2014, 18h06
  2. Passer une table en paramètre
    Par Delphi-ne dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 21/02/2011, 16h12
  3. Faire passer une table en paramètre pour une procedure
    Par samplaid dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 10/02/2006, 11h26
  4. [Conception] Passer une fonction en paramètre
    Par pejay dans le forum Langage
    Réponses: 9
    Dernier message: 09/12/2004, 13h58
  5. Passer une procédure en paramètre ?
    Par Cornell dans le forum Langage
    Réponses: 2
    Dernier message: 24/10/2003, 12h21

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