我知道我几年前就这样做过,但我不记得语法了,而且由于调出大量关于“批量导入”的帮助文档和文章,我在任何地方都找不到它。
这是我想做的,但语法不完全正确…拜托,以前做过这件事的人帮帮我吧:)
INSERT INTO dbo.MyTable (ID, Name)
VALUES (123, 'Timmy'),
(124, 'Jonny'),
(125, 'Sally')
我知道这和正确的语法很接近。我可能需要"散装"这个词,我不记得了。任何想法?
我需要这个SQL Server 2005数据库。我试过这段代码,但没有效果:
DECLARE @blah TABLE
(
ID INT NOT NULL PRIMARY KEY,
Name VARCHAR(100) NOT NULL
)
INSERT INTO @blah (ID, Name)
VALUES (123, 'Timmy')
VALUES (124, 'Jonny')
VALUES (125, 'Sally')
SELECT * FROM @blah
我在关键字“值”附近得到不正确的语法。
使用INSERT INTO…VALUES语法,比如Daniel Vassallo的回答
有一个恼人的限制:
从MSDN
通过直接在VALUES列表中插入行可以构造的最大行数是1000
省略这个限制最简单的方法是使用派生表,如:
INSERT INTO dbo.Mytable(ID, Name)
SELECT ID, Name
FROM (
VALUES (1, 'a'),
(2, 'b'),
--...
-- more than 1000 rows
)sub (ID, Name);
现场演示
这将从SQL Server 2008+开始工作
如果你的数据已经在你的数据库中,你可以这样做:
INSERT INTO MyTable(ID, Name)
SELECT ID, NAME FROM OtherTable
如果你需要硬编码数据,那么SQL 2008和以后的版本让你做以下…
INSERT INTO MyTable (Name, ID)
VALUES ('First',1),
('Second',2),
('Third',3),
('Fourth',4),
('Fifth',5)
USE YourDB
GO
INSERT INTO MyTable (FirstCol, SecondCol)
SELECT 'First' ,1
UNION ALL
SELECT 'Second' ,2
UNION ALL
SELECT 'Third' ,3
UNION ALL
SELECT 'Fourth' ,4
UNION ALL
SELECT 'Fifth' ,5
GO
或者你可以用另一种方法
INSERT INTO MyTable (FirstCol, SecondCol)
VALUES
('First',1),
('Second',2),
('Third',3),
('Fourth',4),
('Fifth',5)
创建一个表以同时插入多条记录。
CREATE TABLE TEST
(
id numeric(10,0),
name varchar(40)
)
之后创建一个存储过程来插入多条记录。
CREATE PROCEDURE AddMultiple
(
@category varchar(2500)
)
as
BEGIN
declare @categoryXML xml;
set @categoryXML = cast(@category as xml);
INSERT INTO TEST(id, name)
SELECT
x.v.value('@user','VARCHAR(50)'),
x.v.value('.','VARCHAR(50)')
FROM @categoryXML.nodes('/categories/category') x(v)
END
GO
执行过程
EXEC AddMultiple @category = '<categories>
<category user="13284">1</category>
<category user="132">2</category>
</categories>';
然后通过查询表进行检查。
select * from TEST;
在SQL Server中使用XML插入多行会更容易,否则会变得非常乏味。
查看完整的文章与代码解释在这里http://www.cyberminds.co.uk/blog/articles/how-to-insert-multiple-rows-in-sql-server.aspx
将以下代码复制到sql server中以查看示例。
declare @test nvarchar(max)
set @test = '<topic><dialog id="1" answerId="41">
<comment>comment 1</comment>
</dialog>
<dialog id="2" answerId="42" >
<comment>comment 2</comment>
</dialog>
<dialog id="3" answerId="43" >
<comment>comment 3</comment>
</dialog>
</topic>'
declare @testxml xml
set @testxml = cast(@test as xml)
declare @answerTemp Table(dialogid int, answerid int, comment varchar(1000))
insert @answerTemp
SELECT ParamValues.ID.value('@id','int') ,
ParamValues.ID.value('@answerId','int') ,
ParamValues.ID.value('(comment)[1]','VARCHAR(1000)')
FROM @testxml.nodes('topic/dialog') as ParamValues(ID)