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
?
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
Il existe deux manières différentes d'implémenter l'insertion de données d'une table à une autre.
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
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
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 & ""
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
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