|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : avril 2008 Messages : 65 ![]() |
bonjour;
j'ai créée une procédure stockées dans laquelle j'ai utilisé des tables temporaires. mais j'ai un soucie quand je rééxecute une autre fois la proc. j'ai l'erreur suivante : Msg 2714, Level 16, State 1, Procedure proc_A, Line 83 There is already an object named '#Temp_FACT' in the database. Msg 2714, Level 16, State 1, Procedure proc_A, Line 147 There is already an object named '#Temp__EST' in the database. apparemment les table sont enregistrées quelques parts dans la BD c'est pour ça que j'ai cette erreur. pourriez vous m'aider svp |
|
|
00
|
|
|
#2 |
|
Futur Membre du Club
![]() Inscription : octobre 2008 Messages : 99 ![]() |
Ta table temporaire continue à vivre toute la durée de la session.
Fais un drop table #toto à la fin si tu veux la supprimer. |
|
|
00
|
|
|
#3 |
|
Membre Expert
![]() |
Quand vous créez une table temporaire, celle_ci est créée dans tempDB.
Pensez dans vos Procédures stockées à supprimer ces tables en fin de script. Vous pouvez en outre vérifier leur existence en début de procédure et les dropper... |
|
|
00
|
|
|
#4 |
|
Invité de passage
![]() Inscription : avril 2008 Messages : 65 ![]() |
rebonjour;
j'ai fait cette ligne de code au début de ma proc mais toujours j'ai le message d'erreur je ne sais pas peut etre j'ai mal codé: IF OBJECT_ID('tempdb..#Temp_PFDV_FACT ') IS NOT NULL DROP TABLE #Temp_PFDV_FACT |
|
|
00
|
|
|
#5 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Bonjour
Votre table temporaire est bien crée dans tempDB, mais elle est préfixée automatiquement par SQl server, afin d’être différenciée des autres tables temporaires du même nom créées par d'autres sessions. Donc effectivement, même si votre table #Temp_PFDV_FACT existe, la table tempdb..#Temp_PFDV_FACT, elle, n'existe pas Avez vous essayé directement OBECT_ID('#Temp_PFDV_FACT') ? |
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() |
ou en utilisant :
IF EXISTS(SELECT * FROM tempdb.sys.tables WHERE NAME='#Temp_PFDV_FACT') |
|
|
00
|
|
|
#7 | |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 950 ![]() |
Citation:
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
|
|
|
#8 |
|
Membre Expert
![]() |
Allez aieeeuuuuu tu nous feras dix pompes pour la peine :-)
|
|
|
00
|
|
|
#9 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
heu... 10 pompes... tu t'exprimes en binaire j’espère ! J'vais y laisser un biceps...
Et pis, c'est pas ma faute, mon SQL Server est en version hebraique
|
|
|
00
|
|
|
#10 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 950 ![]() |
C'est ça... et les tables systèmes elles ont des données en chinois ???
;-) 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
|
|
|
#11 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
|
|
|
00
|
|
|
#12 |
|
Membre Expert
![]() |
et à part ca ça marche? :-)
|
|
|
00
|
|
|
#13 | |||
|
Membre du Club
![]() Inscription : mars 2002 Messages : 52 ![]() |
Citation:
votre syntaxe de suppression de table temporaire locale est correcte. Code :
Cela peut vous guider sur la correction : vous devez, forcément, tenter de créer plus d'une fois vos tables temporaire. regarder vos ordres de créations. 2 conseils : - sachez qu'une procédure stocker peut se déboguer. - il y a des alternatives aux tables temporaires. selon votre situation, l'usage à une variable de table pourrait vous satisfaire. @+ |
|||
|
|
00
|
|
|
#14 |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 667 ![]() |
Bonjour,
Dans tous les cas, rien ne justifie l'utilisation de tables temporaires ou de variables de type table à part une mauvaise conception de la base de données. Les tables temporaires sont une simple duplication de données déjà existantes portées dans TempDB qui sert bien d'autres buts (jointures, tris, ...). Le recalcul des statistiques de colonne sur une telle table se fait toutes les 6 modifications, et entraîne donc des recompilations, coûteuses en CPU ... C'est encore pire avec les variables de type table pour lesquelles aucune statistique n'est maintenue. Le cardinal d'une telle table est à 1 alors qu'elle peut contenir bien plus de lignes, ce qui entraîne la génération de plans incorrects, et donc de lectures inutiles. Dès lors, l'utilisation de telles tables peut être réservée à la récupération de résultats de procédures stockées système comme xp_fixeddrives, xp_filexist qui ne sont pas documentées, ou encore de résultats d'instructions DBCC ... Notons que ces procédures stockées système peuvent être aisément remplacées par des procédures stockées d'assembly @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
|
00
|
|
|
#15 | |
|
Membre du Club
![]() Inscription : mars 2002 Messages : 52 ![]() |
Citation:
Bonjour, Je suis d'accord sur un point : le recours à des variables de tables ou des tables temporaires sont à éviter dans certains cas. Néanmoins, je vous avoue les solliciter très fréquemment, notamment, par la possibilité de traitement ensembliste qu'elles permettent. Pour moi, si on parle de mal absolu, cela concerne surtout les curseurs. un traitement ensembliste est toujours à préférer à des itérations contre performante. Donc pour éviter justement de recourir aux curseurs, je sollicite souvent table temporaire, variable de table ou représentation XML. En terme de performance, il n'y a pas photos. Mais effectivement, ce n'est pas la panacée : - impact sur les caches et les plan , problématique de l'indexation, etc ... @+ |
|
|
|
00
|
|
|
#16 | |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 667 ![]() |
Citation:
En ce qui concerne les curseurs, j'ai publié un petit billet ici. Pour les tables temporaires et les variables de type TABLE, j'en ai publié un autre ici @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
|
|
00
|
|
|
#17 |
|
Membre du Club
![]() Inscription : mars 2002 Messages : 52 ![]() |
Effectivement pour certaines bases, nous ne pouvons même pas parler de conception.
Un enfant de 3 ans aurait fait mieux [...] les yeux fermés héhé ... je ne revendique pas la paternité de ces bases mal. Je fais avec l'historique [...] malheuresement. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com