2

foxproデータベースをSQLに書き換えています。私は次のシナリオに遭遇しました。ifFoxproは、2つの異なるステートメントの下に同じ名前の2つのカーソルを作成できます。

SQLでも同じことをしようとしました。2つの一時テーブルを作成しました。以下のようなもの:

IF @id = 1
BEGIN
SELECT * INTO #abc from table1
END

IF @id = 2
BEGIN
SELECT * INTO #abc frm table2
END

次に、一時テーブルの列の値を別の列で更新​​するコードを記述します。しかし、sqlは「データベースに#abcという名前のオブジェクトがすでに存在する」というエラーをスローします。

これに対する解決策を教えてもらえますか?

ありがとうございました。

4

2 に答える 2

3

両方が使用できる同じ構造を持っていることを考えると、特定のユースケースの場合。

IF @id IN ( 1, 2 )
  BEGIN
      SELECT *
      INTO   #abc
      FROM   table1
      WHERE  @id = 1
      UNION ALL
      SELECT *
      FROM   table2
      WHERE  @id = 2
  END 

発生しているパーサーの問題を回避するために。FoxPro コードの文字通りの翻訳は、非効率的で保守不可能な混乱につながる可能性が高いという Ben のコメントには同意します。

于 2012-06-18T19:11:56.483 に答える
3

でテーブルを作成する代わりに、最初にテーブルを定義してから(両方の一時テーブル構造が同じであると仮定してSELECT INTO) なぜテーブルを定義しないのでしょうか?INSERT

CREATE TABLE #abc (Col1 Int, Col2 varchar(50))

IF @id = 1
BEGIN
  INSERT INTO #abc SELECT * from table1
END

IF @id = 2
BEGIN
  INSERT INTO #abc SELECT * from table2
END
于 2012-06-18T19:09:22.137 に答える