web-dev-qa-db-ja.com

一時テーブルに複数の選択ステートメントを挿入する方法

異なるデータを持つ3つのテーブルがあり、1つのTEMPテーブルに挿入して、そのテーブルをStoredProcedureで返す必要があります。

私は次のように試しました:

-- To get last 10 Days Letters count
SELECT col1,col2,1 AS Type, LettersCount
INTO #temp FROM tblData

-- To get last 4 weeks Letters count
SELECT col1,col2,2 AS Type, LettersCount
INTO #temp FROM tblData

-- To get month wise Letters count
SELECT col1,col2,3 AS Type, LettersCount
INTO #temp FROM tblData

エラーを表示

Msg 2714, Level 16, State 1, Line 16
There is already an object named '#temp ' in the database.
Msg 102, Level 15, State 1, Line 24
Incorrect syntax near 'T'.
Msg 2714, Level 16, State 1, Line 32
There is already an object named '#temp ' in the database.
8

あなたはそれがすでに存在するかどうかを確認できます

IF OBJECT_ID ('tempdb..#TempLetters') is not null
drop table #TempLetters


SELECT col1,col2,1 AS Type, LettersCount
INTO #TempLetters FROM tblData

-- To get last 4 weeks Letters count
INSERT INTO #TempLetters
SELECT col1,col2,2 AS Type, LettersCount
FROM tblData

-- To get month wise Letters count
INSERT INTO #TempLetters
SELECT col1,col2,3 AS Type, LettersCount
FROM tblData
20
Ganesh_Devlekar

SELECT INTOステートメントを使用して、別のselect * into tablename from ..のスキーマを使用して新しい空のテーブルを作成することもできますtablenameテーブルは存在しないはずです。

次のように挿入を変更します。

SELECT col1,
       col2,
       1 AS Type,
       LettersCount
INTO   #temp
FROM   tblData

-- To get last 4 weeks Letters count
INSERT INTO #temp
SELECT col1,col2,2 AS Type,LettersCount
FROM   tblData

-- To get month wise Letters count
INSERT INTO #temp
SELECT col1,col2,3 AS Type,LettersCount
FROM   tblData 
4

一時テーブルを一度作成してから、他の2つのSELECTステートメント用に挿入します。

SELECT col1, col2, 1 AS Type, LettersCount
  INTO #temp
  FROM tblData;

INSERT INTO #temp
    SELECT col1, col2, 2 AS Type, LettersCount
      FROM tblData;

INSERT INTO #temp
    SELECT col1, col2, 3 AS Type, LettersCount
      FROM tblData;
4

挿入ステートメントを1つだけ記述し、挿入前にテーブルを結合しませんか

with A as
(
    -- To get last 10 Days Letters count
    SELECT col1,col2,1 AS Type, LettersCount
    FROM tblData
    union all
    -- To get last 4 weeks Letters count
    SELECT col1,col2,2 AS Type, LettersCount
    FROM tblData
    union all
    -- To get month wise Letters count
    SELECT col1,col2,3 AS Type, LettersCount
    FROM tblData
)
select col1, col2, Type, LettersCount
INTO #temp 
FROM A

これにより、必要に応じてテーブルを追加することができます。必要な場合は、テーブルに挿入ステートメントを追加する必要がないためです。

2
Hitesh

このエラーは、最初のselect intoステートメントがテーブルを作成し、2番目と3番目がそれを再作成しようとするために発生します。

2番目と3番目のクエリを次のように変更します。

insert into #temp
select..
1
Eduard Uta