sql-server into语法 - 在单个SQL查询中插入多行?




values多行 insert语法 (5)

这个问题在这里已经有了答案:

我有多组数据可以一次插入,比如4行。

我的桌子有三列: PersonIdOffice

INSERT INTO MyTable VALUES ("John", 123, "Lloyds Office");
INSERT INTO MyTable VALUES ("Jane", 124, "Lloyds Office");
INSERT INTO MyTable VALUES ("Billy", 125, "London Office");
INSERT INTO MyTable VALUES ("Miranda", 126, "Bristol Office");

我可以在一条SQL statement insert所有4行吗?


Answers

如果您插入到单个表中,则可以像这样编写查询(可能仅在MySQL中):

INSERT INTO table1 (First, Last)
VALUES
    ('Fred', 'Smith'),
    ('John', 'Smith'),
    ('Michael', 'Smith'),
    ('Robert', 'Smith');

使用VALUES语法的INSERT语句可以插入多行。 为此,请包含多个列值列表,每个列表值都包含在括号内,并用逗号分隔。

例:

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);

注意:此答案适用于SQL Server 2005.对于SQL Server 2008和更高版本,其他答案中有更好的方法。

你可以使用INSERT和SELECT UNION ALL

INSERT INTO MyTable  (FirstCol, SecondCol)
    SELECT  'First' ,1
    UNION ALL
SELECT  'Second' ,2
    UNION ALL
SELECT  'Third' ,3
...

尽管如此,对于小数据集来说,对于您的4条记录来说应该没问题。


在SQL Server 2008中,您可以使用单个SQL INSERT语句插入多行。

INSERT INTO MyTable ( Column1, Column2 ) VALUES
( Value1, Value2 ), ( Value1, Value2 )

有关此参考,请参阅MOC Course 2778A - 在SQL Server 2008中编写SQL查询。


你可以使用OPENROWSET 。 看一看。 如果尚未启用Ad Hoc分布式查询,我还包含sp_configure代码以启用Ad Hoc分布式查询。

CREATE PROC getBusinessLineHistory
AS
BEGIN
    SELECT * FROM sys.databases
END
GO

sp_configure 'Show Advanced Options', 1
GO
RECONFIGURE
GO
sp_configure 'Ad Hoc Distributed Queries', 1
GO
RECONFIGURE
GO

SELECT * INTO #MyTempTable FROM OPENROWSET('SQLNCLI', 'Server=(local)\SQL2008;Trusted_Connection=yes;',
     'EXEC getBusinessLineHistory')

SELECT * FROM #MyTempTable




sql sql-server tsql insert