web-dev-qa-db-fra.com

SELECT SQL Server dans la table existante

J'essaie de sélectionner des champs d'une table et de les insérer dans une table existante à partir d'une procédure stockée. Voici ce que j'essaye:

SELECT col1, col2
INTO dbo.TableTwo 
FROM dbo.TableOne 
WHERE col3 LIKE @search_key

Je pense que SELECT ... INTO ... est destiné aux tables temporaires, c’est pourquoi j’obtiens une erreur qui dit que dbo.TableTwo existe déjà.

Comment insérer plusieurs lignes de dbo.TableOne dans dbo.TableTwo?

366
Daniel

SELECT ... INTO ... ne fonctionne que si la table spécifiée dans la clause INTO n'existe pas - sinon, vous devez utiliser:

INSERT INTO dbo.TABLETWO
SELECT col1, col2
  FROM dbo.TABLEONE
 WHERE col3 LIKE @search_key

Cela suppose qu'il n'y a que deux colonnes dans dbo.TABLETWO - vous devez spécifier les colonnes sinon:

INSERT INTO dbo.TABLETWO
  (col1, col2)
SELECT col1, col2
  FROM dbo.TABLEONE
 WHERE col3 LIKE @search_key
605
OMG Ponies

Il existe deux manières différentes d'implémenter l'insertion de données d'une table à une autre.

Pour la table existante - INSERT INTO SELECT

Cette méthode est utilisée lorsque la table est déjà créée dans la base de données et que les données doivent être insérées dans cette table à partir d'une autre table. Si les colonnes répertoriées dans les clauses insert et select sont identiques, elles ne sont pas obligées de les répertorier. Il est recommandé de toujours les énumérer pour des raisons de lisibilité et d’évolutivité.

----Create testable
CREATE TABLE TestTable (FirstName VARCHAR(100), LastName VARCHAR(100))
----INSERT INTO TestTable using SELECT
INSERT INTO TestTable (FirstName, LastName)
SELECT FirstName, LastName
FROM Person.Contact
WHERE EmailPromotion = 2
----Verify that Data in TestTable
SELECT FirstName, LastName
FROM TestTable
----Clean Up Database
DROP TABLE TestTable

Pour table non existante - SELECT INTO

Cette méthode est utilisée lorsque la table n'a pas été créée auparavant et doit être créée lorsque des données d'une table doivent être insérées dans la table nouvellement créée à partir d'une autre table. La nouvelle table est créée avec les mêmes types de données que les colonnes sélectionnées.

----Create a new table and insert into table using SELECT INSERT
SELECT FirstName, LastName
INTO TestTable
FROM Person.Contact
WHERE EmailPromotion = 2
----Verify that Data in TestTable
SELECT FirstName, LastName
FROM TestTable
----Clean Up Database
DROP TABLE TestTable

Réf 12

11
Somnath Muluk

Cela fonctionnerait comme indiqué ci-dessous:

insert into Gengl_Del Select Tdate,DocNo,Book,GlCode,OpGlcode,Amt,Narration 
from Gengl where BOOK='" & lblBook.Caption & "' AND DocNO=" & txtVno.Text & ""
4
Vinod Pareek
select *
into existing table database..existingtable
from database..othertables....

Si vous avez déjà utilisé select * into tablename from other tablenames, la prochaine fois, pour ajouter, vous dites select * into existing table tablename from other tablenames

2
Verena_Techie

Si la table de destination existe mais que vous ne souhaitez pas spécifier de noms de colonnes:

DECLARE @COLUMN_LIST NVARCHAR(MAX);
DECLARE @SQL_INSERT NVARCHAR(MAX);

SET @COLUMN_LIST = (SELECT DISTINCT
    SUBSTRING(
        (
            SELECT ', table1.' + SYSCOL1.name  AS [text()]
            FROM sys.columns SYSCOL1
            WHERE SYSCOL1.object_id = SYSCOL2.object_id and SYSCOL1.is_identity <> 1
            ORDER BY SYSCOL1.object_id
            FOR XML PATH ('')
        ), 2, 1000)
FROM
    sys.columns SYSCOL2
WHERE
    SYSCOL2.object_id = object_id('dbo.TableOne') )

SET @SQL_INSERT =  'INSERT INTO dbo.TableTwo SELECT ' + @COLUMN_LIST + ' FROM dbo.TableOne table1 WHERE col3 LIKE ' + @search_key
EXEC sp_executesql @SQL_INSERT
1
slayernoah