【发布时间】:2011-05-08 07:29:57
【问题描述】:
是否可以使用一个插入语句在表中插入多行? 我知道如果我这样做会发生这种情况:
insert into table ( fields ) select values from another_table
但是如果我想插入呢:
row 1 - ( a1, b1, c1 )
row 2 - ( a2, b2, c2 )
...
row n - ( an, bn, cn )
只有一个插入命令?
【问题讨论】:
是否可以使用一个插入语句在表中插入多行? 我知道如果我这样做会发生这种情况:
insert into table ( fields ) select values from another_table
但是如果我想插入呢:
row 1 - ( a1, b1, c1 )
row 2 - ( a2, b2, c2 )
...
row n - ( an, bn, cn )
只有一个插入命令?
【问题讨论】:
两种解决方案(来源:http://appsfr.free.fr/spip.php?article21):
INSERT ALL
INTO table (column1, column2)
VALUES (value1, value2)
INTO table (column1, column2)
VALUES (value1, value2)
...etc...
SELECT * FROM DUAL ;
或
INSERT INTO table (column1, column2)
SELECT value1, value2 FROM DUAL UNION ALL
SELECT value1, value2 FROM DUAL UNION ALL
...etc...
SELECT value1, value2 FROM DUAL ;
【讨论】:
INSERT ALL
INTO mytable (column1, column2, column3) VALUES ('val1.1', 'val1.2', 'val1.3')
INTO mytable (column1, column2, column3) VALUES ('val2.1', 'val2.2', 'val2.3')
INTO mytable (column1, column2, column3) VALUES ('val3.1', 'val3.2', 'val3.3')
SELECT * FROM dual;
【讨论】:
INSERT INTO products (product_no, name, price) VALUES
(1, 'Cheese', 9.99),
(2, 'Bread', 1.99),
(3, 'Milk', 2.99);
【讨论】:
INSERT INTO College (CustomerID, FirstName, MiddleName, LastName)
SELECT 7, N'Charles', N'Simmons', N'Burns'
UNION ALL
SELECT 9, N'Dominic', N'Fred', N'Einsten'
UNION ALL
SELECT 12, N'Dave', N'William, N'Bryan';
注意: 每个硬编码字符串值之前的字母 N 将字符串转换为 NVARCHAR 值以匹配列的数据类型。
【讨论】:
不,这是不可能的。正如您已经说过的那样,只有使用提供插入值和行的 select 子句才有可能。
【讨论】: