我试图从一个表中选择一些字段并将它们从存储过程插入到现有表中。 这是我正在尝试的: sql
SELECT col1, col2 INTO dbo.TableTwo FROM dbo.TableOne WHERE col3 LIKE @search_key
我认为SELECT ... INTO ...
是临时表,这就是为何我获得dbo.TableTwo
已经存在的错误。 数据库
如何从dbo.TableOne
dbo.TableTwo
多行插入dbo.TableTwo
? ide
它的工做原理以下: spa
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....
若是你已经使用了select * into tablename from other tablenames
,下次要追加,你能够select * into existing table tablename from other tablenames
code
SELECT ... INTO ...
仅在INTO子句中指定的表不存在时才有效 - 不然,您必须使用: get
INSERT INTO dbo.TABLETWO SELECT col1, col2 FROM dbo.TABLEONE WHERE col3 LIKE @search_key
假设dbo.TABLETWO中只有两列 - 不然须要指定列: it
INSERT INTO dbo.TABLETWO (col1, col2) SELECT col1, col2 FROM dbo.TABLEONE WHERE col3 LIKE @search_key
有两种不一样的方法能够实现从一个表到另外一个表插入数据。 io
当先前已在数据库中建立表并将数据从另外一个表插入此表时,将使用此方法。 若是insert子句和select子句中列出的列相同,则不须要列出它们。 为了可读性和可伸缩性的目的,始终列出它们是一种好习惯。 table
----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
当先前未建立表时,须要使用此方法,而且须要在未来自一个表的数据从另外一个表插入到新建立的表中时建立该方法。 使用与所选列相同的数据类型建立新表。 ast
----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
若是目标表确实存在但您不想指定列名称:
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