0

以下は、私のロジックが行うべきことです

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

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

ただし、ステートメントを実行すると、次のエラーが表示されます

#abc. という名前のオブジェクトが既に存在します。

このエラーを克服するための提案はありますか?

4

2 に答える 2

3

できません。IFパーサーはロジックを理解せず、両方のステートメントSELECT INTO発生するものとして扱います。

あなたがすべきことは次のとおりです。

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

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

IF @id = 1
  SELECT * FROM #abc1;
ELSE
  SELECT * FROM #abc2;

結局のところ、#temp テーブルで何か意味のあることを行うには、そこにあるさまざまな列を知る必要がありますよね?

(または、一時テーブルを完全に避けてください。)

于 2012-06-20T14:19:47.690 に答える
0

別の可能な解決策:

CREATE TABLE #abc (
 --put schema here
)

IF @id = 1
BEGIN
  insert into #abc
  select * from table1
END

IF @id = 2
BEGIN
  insert into #abc
  select * from table2
END

select * from #abc

drop table #abc;

*パフォーマンスの点で優れているため、代わりに常に列名を使用する必要があります。

また、select *現在テーブル内にあるすべての列を検索し、列の追加、削除、名前変更などのテーブル構造の変更により、 の結果が自動的に変更されますselect *。列を個別にリストすると、結果をより正確に制御できます。

于 2012-06-20T14:18:57.610 に答える