|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Candidat au titre de Membre du Club
![]() Inscription : février 2011 Messages : 70 ![]() |
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 |
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Sylvain DevidalChef de projets Générix Inscription : février 2010 Messages : 1 062 ![]() |
La principale différence, c'est que :
J'ai dit une grosse connerie |
|
|
00
|
|
|
#3 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 959 ![]() |
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 :
A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#4 |
|
Membre Expert
![]() Sylvain DevidalChef de projets Générix Inscription : février 2010 Messages : 1 062 ![]() |
Grmpf. Désolé !
Ça a toujours été ainsi ? J'étais persuadé que sous SQL Server 2000 tout du moins, les tables temporaires étaient globale (???) |
|
|
00
|
|
|
#5 |
![]() ![]() Alexandre ChemlaConsultant en Business Intelligence Inscription : février 2006 Messages : 1 773 ![]() |
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.
__________________
Alexandre Chemla - Consultant MS BI chez Masao |
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() Sylvain DevidalChef de projets Générix Inscription : février 2010 Messages : 1 062 ![]() |
D'accord. Encore désolé, j'ai tout mélangé
|
|
|
00
|
|
|
#7 |
|
Candidat au titre de Membre du Club
![]() Inscription : février 2011 Messages : 70 ![]() |
Merci pour vos réponses, je me range ça dans un coin de ma tête !
![]() Par contre c'est quoi et à quoi ça sert : "soit une table en dur dans la base avec un tag de données temporaires." |
|
|
00
|
|
|
#8 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 959 ![]() |
En gros, c'est la même chose qu'une table temporaire, mais c'est bien une table en dur dans la base, avec en sus une colonne permettant de stocker un marqueur transactionnel (GUID par exemple).
On l'utilise de la façon suivante :
A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#9 |
|
Membre Expert
![]() ![]() |
J'ajoute, qu'il est impossible de faire les opération suivantes avec une variable table :
Par contre la variable table (@table) est très utile pour les UDFs retournant une table Je me suis posé la même question il y a un moment A+ |
|
00
|
|
|
#10 |
|
Candidat au titre de Membre du Club
![]() Inscription : février 2011 Messages : 70 ![]() |
Un grand Merci !
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com