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-8]table temporaire # : Pourquoi?


Sujet :

MS SQL Server

  1. #1
    Membre habitué Avatar de Baquardie
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2003
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Canada

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

    Informations forums :
    Inscription : Juillet 2003
    Messages : 267
    Points : 144
    Points
    144
    Par défaut [sql-8]table temporaire # : Pourquoi?
    Bonjour

    Je suis en train de programmer une stored procedure et j'utilise les tables temporaires :

    Dans ma compagnie, nous avons deux compagnies (!) qui fonctionnent pareil mais qui sont sur deux databases séparées. Donc systématiquement, dès que nous faisons une stored procedure, elle doit être fonctionnelle pour les deux compagnies.

    Je passe donc en paramètre le no de la compagnie et dans le code je fais une validation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if @Compagnie = 1 
    BEGIN
      select * into #Temp_table from database1.dbo.table_name
    END
     
    if @Compagnie = 2 
    BEGIN
         select * into #Temp_table from database2.dbo.table_name
    END
    Eh bien cela ne fonctionne pas! Cela retourne l'erreur

    Server: Msg 2714, Level 16, State 1, Line 126
    There is already an object named '#temp_table' in the database.
    Ce qui est embêtant c'est que le reste du code refère à la table temporaire...

    J'ai solutionné le problème en créant une table directement dans ma base de données au lieu d'utiliser le #...

    Ma question : mais pourquoi SQL m'empêche de faire cela? Je ne comprend pas, lorsque le code va rouler, nécessairement, la table ne sera pas créée deux fois?

    Merci de vos réponses

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 4
    Points : 5
    Points
    5
    Par défaut table tempo
    Tu as cette solution puisqu'en fait lorque tu fais une select into # tu fais une déclaration implicite de table donc deux déclarations, ça ne marche pas. J'ai pris pour exemple la base nothwind avec la table region.
    Sinon, lorsque tu veux travailler sur des bases de manière dynamique utilise pluôt la directive use database


    declare @Compagnie int
    create table #temp_table (regionid int,regiondescription nchar(100))

    select @Compagnie =1


    IF @Compagnie = 1
    BEGIN
    INSERT INTO #Temp_table select * from northwind.dbo.region
    drop table #Temp_table
    END

    IF @Compagnie = 2
    BEGIN
    INSERT INTO #Temp_table select * from northwind.dbo.region
    drop table #Temp_table
    END

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

Discussions similaires

  1. SQL & VBA & Table temporaire
    Par HurGeek dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 23/05/2012, 17h39
  2. Projet ACCESS/SQL-Server2000 : Table temporaire locale ou ?
    Par apprenti46 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 02/01/2008, 20h58
  3. Réponses: 4
    Dernier message: 28/04/2007, 22h42
  4. Réponses: 12
    Dernier message: 30/01/2007, 13h37
  5. MS SQL SERVER et les tables temporaires
    Par beb_has_return dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 11/02/2005, 14h36

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