[我知道我早在几年前就完成了此操作,但是我不记得该语法,而且由于收集了大量有关“批量导入”的帮助文档和文章,所以在任何地方都找不到它。
这是我想做的,但是语法不完全正确……请曾经做过此事的人帮帮我:)
INSERT INTO dbo.MyTable (ID, Name)
VALUES (123, 'Timmy'),
(124, 'Jonny'),
(125, 'Sally')
我知道这是正确语法的close。我可能在其中需要“散装”一词,或者什么,我不记得了。有什么主意吗?
我需要此用于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
我正在获取Incorrect syntax near the keyword 'VALUES'.
INSERT INTO dbo.MyTable (ID, Name)
SELECT 123, 'Timmy'
UNION ALL
SELECT 124, 'Jonny'
UNION ALL
SELECT 125, 'Sally'
对于SQL Server 2008,可以根据问题中的语句在一个VALUES子句精确地中进行(您只需添加逗号以分隔每个值语句)...
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)
我一直在使用以下内容:
对应于INSERT INTO [TableName] (ID, Name)
values (NEWID(), NEWID())
GO 10
(SQL Server 2005),您不能省略INSERT (Transact-SQL)且每次都必须指定它或使用其他语法/方法,
这在SQL中非常快速且有效。假设您有表INSERT INTO dbo.Blah
。
DataTable dt = new DataTable(); dt.Columns.Add("a"); dt.Columns.Add("b"); dt.Columns.Add("c"); dt.Columns.Add("d"); for (int i = 0; i < 10; i++) { DataRow dr = dt.NewRow(); dr["a"] = 1; dr["b"] = 2; dr["c"] = "Charan"; dr["d"] = 4; dt.Rows.Add(dr); } SqlConnection con = new SqlConnection("Connection String"); using (SqlBulkCopy bulkcopy = new SqlBulkCopy(con)) { con.Open(); bulkcopy.DestinationTableName = "Sample"; bulkcopy.WriteToServer(dt); con.Close(); }
您的语法几乎在SQL Server 2008中有效(但在SQL Server 2005 1中无效:]
CREATE TABLE MyTable (id int, name char(10));
INSERT INTO MyTable (id, name) VALUES (1, 'Bob'), (2, 'Peter'), (3, 'Joe');
SELECT * FROM MyTable;
id | name
---+---------
1 | Bob
2 | Peter
3 | Joe
1回答问题时,并未发现该问题是针对SQL Server2005。由于我认为它仍然很重要,因此我将其保留在此处。
如果您的数据已经在数据库中,则可以执行以下操作:
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)
像INSERT INTO ... VALUES
一样使用Daniel Vassallo's语法答案有一个烦人的局限性:
来自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);
[LiveDemo
] >>
您可以执行此操作(很丑,但是可行):
这将满足您的要求:
您可以使用联合:
对于SQL Server 2008来说看起来不错。对于SS2005及更早版本,您需要重复VALUES语句。
在SQL Server中使用XML插入多行会更容易,否则会变得非常乏味。