web-dev-qa-db-fra.com

Comment insérer plusieurs instructions de sélection dans une table temporaire

J'ai trois tables avec des données différentes et je dois insérer dans une table TEMP et renvoyer cette table dans StoredProcedure.

J'ai essayé comme:

-- 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

Afficher l'erreur en tant que

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.
5
Dinesh Reddy Alla

Vous pouvez vérifier qu'il existe déjà ou NON

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
19
Ganesh_Devlekar

L'instruction SELECT INTO peut également être utilisée pour créer une nouvelle table vide à l'aide du schéma d'un autre select * into tablename from .. heretablenametable ne doit pas exister.

Changez votre insert comme ceci: 

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
Pரதீப்

Créez une fois la table temporaire, puis insérez-la dans les deux autres instructions 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
Jonathan Leffler

Pourquoi ne pas écrire une seule instruction insert et unir les tables avant insertion

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

Cela vous aidera à ajouter plus de tables dans la sélection facilement si vous en avez besoin, car vous n'aurez plus besoin d'instructions insert pour les insérer.

2
Hitesh

L'erreur se produit car la première instruction select into crée la table et que les deuxième et troisième tentatives tentent de la recréer.

Modifiez les deuxième et troisième requêtes en:

insert into #temp
select..
1
Eduard Uta