0

SQL Serverで次のコードを試しましたが、奇妙なエラーが発生しました。

IF OBJECT_ID(N'tempdb..#t1') IS NULL
BEGIN
CREATE TABLE #t1(
    F1 DATE NOT NULL
)
END

IF OBJECT_ID(N'tempdb..#t1') IS NULL
BEGIN
CREATE TABLE #t1(
    F1 DATE NOT NULL
)
END

エラー:

「#t1」が存在しました。

このエラーが発生する理由がわかりませんか?

4

6 に答える 6

2

これはアイデアです

IF OBJECT_ID(N'tempdb..#t1') IS NULL
BEGIN
   CREATE TABLE #t1( F1 DATE NOT NULL )
END
GO

IF OBJECT_ID(N'tempdb..#t1') IS NULL
BEGIN
   CREATE TABLE #t1( F1 DATE NOT NULL )
END
GO
于 2012-12-11T09:39:42.663 に答える
1
  • SQL Serverは、指定された名前('#t1')の一時テーブルを格納しません。代わりに、サフィックスを追加して128文字の長さにします。したがって、は見つかりません'#t1'

あなたはLIKE '#t1%'それを見つけるために使用することができます。

IF NOT EXISTS (select * from tempdb.sys.tables where name like '#t1%')
  • また、最初のクエリの後に追加GOして、バッチの終了をマークする必要があります。

以下のように使用してください。

--DROP TABLE #t1
--GO

    IF OBJECT_ID(N'tempdb..#t1') IS NULL
    BEGIN
    CREATE TABLE #t1(
        F1 DATE NOT NULL
    )
    END
    GO

    IF NOT EXISTS(select * from tempdb.sys.tables where name like '#t1%')
    BEGIN
    CREATE TABLE #t1(
        F1 DATE NOT NULL
    )
    END
于 2012-12-11T10:01:46.027 に答える
1

代わりにこれを試してください:

IF NOT exists(SELECT 1
              FROM information_schema.columns 
              WHERE table_name LIKE '#t1%')
BEGIN
CREATE TABLE #t1(
    F1 DATE NOT NULL
)
END
于 2012-12-11T09:39:59.867 に答える
1

これを試してください:

IF Not EXISTS (select * from sys.objects where Name = 'tempdb..#t1')

BEGIN
CREATE TABLE #t1(
    F1 DATE NOT NULL
)
END
于 2012-12-11T09:42:21.560 に答える
1

これは実行時エラーではなく、「コンパイル時」エラーです

--Drop table #t1  // call this alone to ensure that it's not existing, then call the rest, nothing will be printed

Print 0

IF OBJECT_ID('tempdb..#t1') IS NULL
BEGIN
Print 1
CREATE TABLE #t1(
    F1 DATE NOT NULL
)
END



IF OBJECT_ID('tempdb..#t1') IS NULL
BEGIN
Print 2
CREATE TABLE #t1(
    F1 DATE NOT NULL
)
END
于 2012-12-11T09:51:23.740 に答える
1

コードは実際には問題ありませんが、SQL Serverには制限があり、クエリ最適化フェーズ中に失敗します。ここで回答を参照してください-SQLServerは、一時テーブルが存在しないのに、一時テーブルがすでに存在すると考えるのはなぜですか

于 2012-12-11T10:02:24.157 に答える