2 votes

Problème de OBJECT_ID de table temporaire SQL Server 2012

Nous avons un problème lors de la mise à niveau vers SQL Server 2012. J'utilise le script suivant pour créer des tables temporaires qui fonctionnaient bien sur SQL Server 2008 R2 mais qui génèrent maintenant une erreur avec 2012 :

if (OBJECT_ID( 'tempdb..#idstable') > 0)
    truncate table #idstable
else
    create table #idstable (id int not null)

l'erreur générée est

Il existe déjà un objet nommé '#idstable' dans la base de données.

Cela n'est évidemment pas généré la première fois que j'utilise le script (dans la même transaction).

Une idée ? Merci !

7voto

Aaron Bertrand Points 116343

Dans SQL Server 2012, les tables #temporaires sont créées avec un object_id négatif, donc votre script ne fonctionnera pas tel quel. La manière la plus sûre est:

IF OBJECT_ID( 'tempdb..#idstable') IS NOT NULL

(J'en ai parlé ici, et je savais que ça piégerait quelqu'un.)

Même si votre script est destiné à l'échec de toute façon, s'il fait partie d'un seul lot. Le parseur ne vous permettra pas d'essayer de créer la même table #temporaire deux fois.

0voto

Kevin Aenmey Points 6175

Essaye ça :

SI OBJECT_ID (N'tempdb..#idstable', N'U') N'EXISTE PAS
    truncation de la table #idstable
sinon
    création de la table #idstable (id int non nul)

0voto

Narud Points 9

Chers amis,

Ce problème est dû à l'instruction de troncation. Tronquer est utilisé pour supprimer tous les enregistrements en préservant la table. Utilisez drop table au lieu de truncate table et cela fonctionnera très bien ;-)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X