2

我是一个 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'

我已经通过各种教程的“帮助”尝试了各种主题的变化,但到目前为止我没有尝试过任何工作。似乎每个不同的数据库程序的 SQL 用法略有不同。

关于如何更改我的代码以使其与 MS Access 一起使用的任何建议?

4

3 回答 3

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 和循环会更容易。

于 2010-08-18T16:49:52.123 回答
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 接受它。

As a result there was no increase in performance. It's not worth the hassle and requires the batch up logic in code so really for me means I will be looking elsewhere for performance gains.

于 2011-09-27T15:45:55.937 回答
0

Access 将只在查询中运行一条 SQL 语句。通常在 Access 中,您将从 csv 文件或电子表格加载数据。如果您真的想在 SQL 中执行此操作,请获取 iSQLviewer 之类的客户端,该客户端将连接到大多数数据库(我没有使用 Access 尝试过)并运行脚本。

于 2010-08-18T22:44:45.847 回答