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 :

Create Table #tmp ou Declare @tmp Table


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Février 2011
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 87
    Par défaut Create Table #tmp ou Declare @tmp Table
    Bonjour,

    Utiliser
    Create Table #tmp ...
    OU
    Declare @tmp Table ...

    J'aurais voulu savoir quelles sont les différences entre ces 2 méthodes ?
    Je sais que l'une est permanente, donc ne pas oublier de la supprimer après le traitement et l'autre ne vit que pendant le traitement en cours.

    Et comment faire le meilleur choix ?

    Merci

  2. #2
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    La principale différence, c'est que :

    J'ai dit une grosse connerie

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 001
    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 : 22 001
    Billets dans le blog
    6
    Par défaut
    NON !
    #tmp est une table locale instanciée dans la tempdb (base de données systèmes des objets temporaire) mais permettant des contraintes avancées (CHECK, FOREIGN KEY...) et l'indexation
    Elle persiste tant que l'utilisateur est connecté et sera détruite par un DROP TABLE ou la déconnexion de l'utilisateur.

    @tmp est une variable table instanciée dans la tempdb, mais ne permet que la clef primaire (pas d'index ni d'autres contraintes).
    Elle n'existe que dans la porté locale de code (pas de DROP...)

    MAIS ... la cardinalité de @tmp est évaluée à 1 dans les plans de requêtes, tandis que celle de #tmp est évaluée de manière statistique !
    Et cela change beaucoup de chose en matière de perf.

    Autrement dit : une seule ligne (voire très peu) et peu de colonnes => @tmp.
    Dans les autres cas :
    • soit #tmp
    • soit une table en dur dans la base avec un tag de données temporaires.


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

  4. #4
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Grmpf. Désolé !

    Ça a toujours été ainsi ?
    J'étais persuadé que sous SQL Server 2000 tout du moins, les tables temporaires étaient globale (???)

  5. #5
    Membre Expert Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Par défaut
    La différence globale/locale se fait entre une table # / ##
    Soit elle est globale pour les session, soit uniquement pour la session locale.

    La différence avec les @table est tout autre.

  6. #6
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    D'accord. Encore désolé, j'ai tout mélangé

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

Discussions similaires

  1. update table tout les x tmps
    Par ghost73 dans le forum Requêtes
    Réponses: 0
    Dernier message: 06/08/2012, 15h53
  2. declarer nom table comme variable
    Par naouah dans le forum ASP
    Réponses: 6
    Dernier message: 29/08/2007, 17h25
  3. Réponses: 3
    Dernier message: 13/06/2007, 17h00
  4. Réponses: 2
    Dernier message: 28/07/2006, 14h48
  5. Xampp #1 - Can't create/write to file '/root/tmp/#sql_1a2f_0
    Par Alain15 dans le forum Applications et environnements graphiques
    Réponses: 3
    Dernier message: 24/02/2006, 03h59

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