如何使用Access ODBC使用一个查询更新多个表?

时间:2013-12-11 19:56:06

标签: sql ms-access odbc

我做了彻底的搜索但找不到这个问题的答案。我使用Access ODBC连接,需要运行一个查询,该查询根据一个值同时更新许多表。

这就是我现在正在做的事情:

$DSN="accessodbc";
$DSN_User="myusername";
$DSN_Passwd="mypassword";
$objConnect = odbc_connect( $DSN, $DSN_User, $DSN_Passwd );

$strSQL1="UPDATE table1 SET column1='dup' WHERE User=" . $user;
$strSQL2="UPDATE table2 SET column1='dup' WHERE User=" . $user;
$strSQL3="UPDATE table3 SET column1='dup' WHERE User=" . $user;

$objExec1 = odbc_exec($objConnect, $strSQL1);
$objExec2 = odbc_exec($objConnect, $strSQL2);
$objExec3 = odbc_exec($objConnect, $strSQL3);

......等约50张桌子。

这有效,但显然不是资源方面的最佳解决方案。有没有办法用一个查询更新所有表?

提前致谢。

3 个答案:

答案 0 :(得分:2)

虽然用一个SQL语句UPDATE多个表是相当不寻常的,但在这种特殊情况下你可能会这样(虽然为~50个表实现这个可能比它的价值更麻烦)。

为了记录,我刚刚在Access 2010和测试表中测试了以下内容

[table1]
User  column1
----  -------
Gord
Bob          

[table2]
User   column1
-----  -------
Gord
Homer         

[table3]
User      column1
--------  -------
Gord
Quagmire         

查询

UPDATE
    (
        table1
        INNER JOIN
        table2
            ON table1.User = table2.User
    )
    INNER JOIN
    table3
        ON table2.User = table3.User
SET
    table1.column1 = 'dup',
    table2.column1 = 'dup',
    table3.column1 = 'dup'
WHERE table1.User = 'Gord'

导致

[table1]
User  column1
----  -------
Gord  dup    
Bob          

[table2]
User   column1
-----  -------
Gord   dup    
Homer         

[table3]
User      column1
--------  -------
Gord      dup    
Quagmire         

答案 1 :(得分:0)

没有。您无法在单个查询中更新多个表。但是,您可以将所有更新放入事务中,并在所有更新结束时提交事务。

BEGIN TRANSACTION
   Do all your update statements.
COMMIT TRANSACTION

or, if something goes wrong: 

ROLLBACK TRANSACTION

答案 2 :(得分:0)

怎么样

For I = 1 to 50
   $strSQL = "Update table" & I & " set column1 = 'dubp' WHERE User=" & $user
   Odb_exec($objContact,$strSQL)
Next i