1
IF @someVariable = 0
BEGIN
    SELECT * 
    INTO #TempTable
    FROM MyTable
    WHERE Category="Something"
END
ELSE
BEGIN
    SELECT * 
    INTO #TempTable
    FROM MyTable
    WHERE Category="SomethingElse"
END
DROP TABLE #TempTable

「データベースにはすでに「#TempTable」という名前のオブジェクトがあります。これを回避する方法はありますか?

4

2 に答える 2

4
IF @someVariable = 0
BEGIN
   SELECT * 
   INTO #TempTable1
   FROM MyTable
   WHERE Category="Something"
   DROP TABLE #TempTable1
 END
ELSE
 BEGIN
   SELECT * 
   INTO #TempTable2
   FROM MyTable
   WHERE Category="SomethingElse"
   DROP TABLE #TempTable2
END

これは機能しますが、他に何をする必要があるかによっては、最善の解決策ではない場合があります。しかし、サンプルコードでは、問題を解決します。

または:

SELECT * into #TempTable from MyTable where (1=0)

IF @someVariable = 0
   INSERT INTO #TempTable SELECT * FROM MyTable WHERE Category="Something"
ELSE
   INSERT INTO #TempTable SELECT * FROM MyTable WHERE Category="OtherSomething"

DROP TABLE #TempTable
于 2012-07-29T21:59:40.500 に答える
2

テーブル変数はあなたのニーズに合うでしょうか...これらのスコープの問題のために私はこれらを好みます。

DECLARE @TempTable TABLE (
    -- Your definition
)

IF @someVariable = 0
BEGIN
    INSERT INTO @TempTable (...)
    SELECT ...
    FROM MyTable
    WHERE Category="Something"
END
ELSE
BEGIN
    INSERT INTO @TempTable (...)
    SELECT ...
    FROM MyTable
    WHERE Category="SomethingElse"
END

または、列を明示的に定義する必要がないようにしようとしていますか?事前に状態を判断するためにリファクタリングできますか?

DECLARE @Category varchar(100)
IF @someVariable = 0
BEGIN
    SET @Category = "Something"
END
ELSE
BEGIN
    SET @Category = "SomethingElse"
END

SELECT * 
INTO #TempTable
FROM MyTable
WHERE Category = @Category

DROP TABLE #TempTable
于 2012-07-29T21:56:36.350 に答える