2012-07-03 1 views
2

Nous avons un problème de mise à niveau vers SQL Server 2012. J'utilise le script suivant pour créer des tables temporaires qui fonctionnaient correctement sur SQL Server 2008 R2, mais génère maintenant une erreur avec 2012:Table temporaire SQL Server 2012 OBJECT_ID issue

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

l'erreur est jeté

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

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

Une idée? Je vous remercie!

Répondre

7

Dans SQL Server 2012, les tables #temp sont créés avec un object_id négatif, de sorte que votre script ne fonctionne pas comme il est. La meilleure façon est: (. I blogged about this here, and knew it would catch someone)

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

Bien que votre script est lié à l'échec de toute façon, si elle fait partie d'un lot unique. L'analyseur ne vous laissera pas essayer de créer deux fois la même table #temp.

+0

Je ne peux tout simplement pas une bonne raison pour laquelle Microsoft est toujours en train de changer des choses comme ça ... Merci Man! –

+3

@MoslemBenDhaou ils peuvent changer tout ce qui n'est pas documenté. Est-ce que Microsoft vous a déjà dit que #temp table object_ids est toujours positif? C'est un problème de s'appuyer sur quelque chose que vous avez simplement observé ... –

0

Essayez ceci:

IF OBJECT_ID (N'tempdb..#idstable', N'U') IS NOT NULL 
    truncate table #idstable 
else 
    create table #idstable (id int not null) 
0

Mes chéries,

Ce problème est dû à la déclaration de troncature. Truncate est utilisé pour supprimer tous les enregistrements préservant la table. Utilisez la table drop au lieu de truncate table et cela fonctionnera bien ;-)

+2

Cela est tellement faux, parce que je dois seulement tronquer la table si elle existe sinon, à la fin, vous êtes sûr d'avoir une table temporaire vide. –