以下は、私のロジックが行うべきことです
IF @id = 1
BEGIN
SELECT * INTO #abc from table1
END
IF @id = 2
BEGIN
SELECT * INTO #abc frm table2
END
ただし、ステートメントを実行すると、次のエラーが表示されます
#abc. という名前のオブジェクトが既に存在します。
このエラーを克服するための提案はありますか?
以下は、私のロジックが行うべきことです
IF @id = 1
BEGIN
SELECT * INTO #abc from table1
END
IF @id = 2
BEGIN
SELECT * INTO #abc frm table2
END
ただし、ステートメントを実行すると、次のエラーが表示されます
#abc. という名前のオブジェクトが既に存在します。
このエラーを克服するための提案はありますか?
できません。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 テーブルで何か意味のあることを行うには、そこにあるさまざまな列を知る必要がありますよね?
(または、一時テーブルを完全に避けてください。)
別の可能な解決策:
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 *
。列を個別にリストすると、結果をより正確に制御できます。