我正在尝试从一个表中选择一些字段并将它们从存储过程中插入到现有表中。这是我正在尝试的:
SELECT col1, col2
INTO dbo.TableTwo
FROM dbo.TableOne
WHERE col3 LIKE @search_key
我认为 SELECT ... INTO ...
用于临时表,这就是为什么我收到 dbo.TableTwo
已经存在的错误。
如何将多行从 dbo.TableOne
插入 dbo.TableTwo
?
SELECT ... INTO ...
仅在 INTO 子句中指定的表不存在时才有效 - 否则,您必须使用:
INSERT INTO dbo.TABLETWO
SELECT col1, col2
FROM dbo.TABLEONE
WHERE col3 LIKE @search_key
这假设 dbo.TABLETWO 中只有两列 - 否则您需要指定列:
INSERT INTO dbo.TABLETWO
(col1, col2)
SELECT col1, col2
FROM dbo.TABLEONE
WHERE col3 LIKE @search_key
有两种不同的方法可以实现将数据从一个表插入到另一个表。
对于现有表 - INSERT INTO SELECT
当表已经在数据库中创建并且要从另一个表中将数据插入到该表中时,使用此方法。如果 insert 子句和 select 子句中列出的列相同,则不需要列出它们。出于可读性和可扩展性目的,始终列出它们是一种很好的做法。
----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
对于不存在的表 - SELECT INTO
该方法用于之前没有创建表的情况,需要将一张表中的数据插入到另一张表中新创建的表中时创建。新表使用与选定列相同的数据类型创建。
----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
它将按以下方式工作:
insert into Gengl_Del Select Tdate,DocNo,Book,GlCode,OpGlcode,Amt,Narration
from Gengl where BOOK='" & lblBook.Caption & "' AND DocNO=" & txtVno.Text & ""
SELECT *
不起作用。这是一个更好的方法,谢谢!
如果目标表确实存在但您不想指定列名:
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
select *
into existing table database..existingtable
from database..othertables....
如果您已经使用了 select * into tablename from other tablenames
,下次追加,您说 select * into existing table tablename from other tablenames
如果您想在使用 select into 创建的新表中创建一个标识列,则可以按如下方式完成。
SELECT
ID = IDENTITY(INT, 1, 1),
name
INTO table2
FROM table1
如果要从 Table_B 中插入 Table_A,仅当该列不在 Table_A 中时,请使用以下命令:
BEGIN TRANSACTION
INSERT INTO dbo.Table_A (Column_1)
SELECT DISTINCT Some_Column AS Column_1
FROM dbo.Table_B
WHERE Some_Column
NOT IN (SELECT DISTINCT GroupId
FROM dbo.Table_A)
COMMIT
INTO
子句中指定的表不存在,SELECT... INTO...
语句似乎不起作用。我收到“未声明的变量”错误。虽然也许这个问题只适用于 MySQL。CREATE TABLE ... LIKE .. worked
;