2

SQL Server 2012 へのアップグレードで問題が発生しました。次のスクリプトを使用して、SQL Server 2008 R2 で正常に動作していた一時テーブルを作成していますが、2012 でエラーが発生しています。

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

スローされるエラーは

データベースには「#idstable」という名前のオブジェクトが既に存在します。

これは明らかに、(同じトランザクションで) スクリプトを初めて使用するときにスローされません。

何か案が?ありがとうございました!

4

3 に答える 3

7

SQL Server 2012 では、 #temp テーブルは負の値で作成されるobject_idため、スクリプトはそのままでは機能しません。最も安全な方法は次のとおりです。

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

私はこれについてここでブログを書きましたが、誰かを捕まえることを知っていました。)

とにかく、スクリプトが単一のバッチの一部である場合、スクリプトは失敗する運命にあります。パーサーでは、同じ #temp テーブルを 2 回作成することはできません。

于 2012-07-03T13:33:21.930 に答える
0

これを試して:

IF OBJECT_ID (N'tempdb..#idstable', N'U') IS NOT NULL
    truncate table #idstable
else
    create table #idstable (id int not null)
于 2012-07-03T13:33:05.177 に答える
0

親愛なる皆さん、

この問題は、truncate ステートメントが原因です。Truncate は、テーブルを保持しているすべてのレコードを削除するために使用されます。切り捨てテーブルの代わりにドロップテーブルを使用すると、これでうまくいきます;-)

于 2012-07-10T20:35:37.013 に答える