在MS Access中多次插入语句

时间:2010-08-18 16:46:12

标签: sql ms-access multirow insert-into

我是一个SQL新手并试图弄清楚如何在一个SQL语句中插入多个表条目。 这是我的代码:

INSERT INTO [Students](P_Id,FirstName,LastName,class,city,Phone)
SELECT 123,'Avi','Davis',2,'Tel-Mond','03-456789'
UNION
SELECT 234, 'Dani',2,'Dimona',' 02-111'
UNION 
SELECT 345,'Itzik',3,'Ariel', '03-2222'
UNION 
SELECT456, 'Koby', 3, 'Tel-Aviv', '03-333333'
UNION 
SELECT 789,'Moshe' ,2 , 'Tel-Aviv','03-7777777'

我已经尝试了各种教程中的“帮助”主题的各种变体,但到目前为止我没有尝试过任何工作。似乎与每个不同的DB程序SQL使用略有不同。

有关如何更改我的代码以便它可以与MS Access一起使用的任何建议吗?

3 个答案:

答案 0 :(得分:1)

您可以在MS Access中执行类似的操作,但是您必须拥有from表,并且必须注意只返回一行:

INSERT INTO [Students](P_Id,FirstName, LastName, class,  city,Phone)
SELECT 123 As P_ID, 'Avi' As FirstName, 'Davis' As LastName, 2 As Class,
        'Tel-Mond' As City,'03-456789' As Phone FROM AnyTable
UNION
<...>

使用VBA和循环可能更容易。

答案 1 :(得分:1)

我想扩展这里给出的答案,因为今天我尝试了多线插入方法,以提高我们的应用程序的性能,并且不会得到任何显着的改进。

我通过使用类似于上面的Remou的方法来工作,但你可能想要UNION ALL,否则将不会插入两个相同的行,因为UNION具有隐式的不同而且我似乎需要一个别名的外部选择,否则它没有'工作。另外,当您如上所述进行联合时,您需要Access中的from表,因此我遵循Oracle约定并创建了一个名为DUAL的单行表。

INSERT INTO [Students](P_Id,FirstName, LastName, class,  city,Phone)
SELECT * FROM
(
 SELECT 123 As P_ID, 'Avi' As FirstName, 'Davis' As LastName, 2 As Class,
        'Tel-Mond' As City,'03-456789' As Phone FROM DUAL
UNION ALL
 SELECT 456 As P_ID, 'FDA' As FirstName, 'RET' As LastName, 3 As Class,
        'lima' As City,'03-456789' As Phone FROM DUAL
.
.
.
.
) as MyAlias

在我的示例中,我使其更简单,并创建了一个带有varchar(50)列的列表。 我尝试了1000行,Access抱怨“查询过于复杂”。我不得不把它降到49行才能成功插入。这表明您需要将插入批处理为较小的块,以便Access接受它。

因此,性能没有提高。这不值得麻烦,并且需要代码中的批处理逻辑,所以对我来说真的意味着我会在其他地方寻找性能提升。

答案 2 :(得分:0)

Access只会在查询中运行一个SQL语句。通常在Access中,您将从csv文件或电子表格加载数据。如果你真的想在SQL中实现它,那么就像iSQLviewer这样的客户端将连接到大多数数据库(我没有尝试使用Access)并运行脚本。