Access 中的 T-SQL 直通查询是否可能包含本地 Access table?

Possible for T-SQL pass-through query in Access to include a local Access table?

我正在使用 Access 数据库,它有 ODBC 链接 SQL 服务器 table 和本地 table,并且我有以下 tsql 脚本(如 VB 脚本) 在 Access 数据库中。我想知道 tsql 查询是否可以由一个链接 table 和一个本地访问 table 组成,而不是全部来自链接 table。我知道 SQL 服务器对我的本地数据一无所知,但我只是想知道这种编码是否有效。如果是,下面的代码应该如何修改?如果不是,那意味着我需要先将本地 table 移动到 SQL 服务器?感谢有人可以提供建议。非常感谢。

以下部分尝试从本地 table 更新链接 table。

qryd.SQL = "
UPDATE dbo.linked_table 
SET dbo.linked_table.field = '" & [local_access_table]![access_field] & "' 
FROM dbo.linked_table 
INNER JOIN " & [local_access_table] & " 
ON ( '" & [local_access_table]![access_field] & "' = dbo.linked_table.field ) 
WHERE dbo.linked_table.field = 'value'
"

反之亦然,以下部分尝试从链接 table 更新本地 table。

qryd.SQL = "
UPDATE " & [local_access_table] & "
SET '" & [local_access_table]![access_field] & "' = dbo.linked_table.field
FROM " & [local_access_table] & "
INNER JOIN dbo.linked_table
ON ( dbo.linked_table.field = '" & [local_access_table]![access_field] & "' ) 
WHERE '" & [local_access_table]![access_field] & "' = 'value'
"

可能是我的心态受Access影响太大,所以我还有其他类似的问题。在 Access 中,一个 select 查询(在本地 Access 中创建)可以很容易地包含在其他 Access 查询中,我想知道这个概念是否可以应用于 tsql 查询?以此为例

qryd.SQL = "
UPDATE dbo.linked_table 
SET dbo.linked_table.field = '" & [local_access_query]![query_field] & "' 
FROM dbo.linked_table 
INNER JOIN " & [local_access_query] & " 
ON ( '" & [local_access_query]![query_field] & "' = dbo.linked_table.field ) 
WHERE dbo.linked_table.field = 'value'
"

非常感谢!

是的,在 SQL 服务器实例上使 Access tables 和视图可供 T-SQL 代码 运行ning 使用在技术上是可能的。这可以通过调整 SQL 服务器配置然后

  1. 将 Access 数据库作为 "Linked Server" 添加到 SQL 服务器中,或
  2. 在 T-SQL 代码中使用 OPENROWSET() 运行nning 在 SQL 服务器上。

但是,这些方法很少用于生产系统,因为需要 SQL 服务器调整(详情 here)可能会降低 SQL 服务器实例本身的性能和稳定性,并且因为生成的 T-SQL 代码可能面临性能 "challenges" 类似于使用 ODBC 链接 table 的 Access SQL 查询所面临的性能。

在我看来,如果确实需要在 SQL 服务器上的 运行 进程中使用特定的 table,那么 table 应该驻留在 SQL 服务器上。任何需要使用该 table 的访问进程仍然可以通过使用链接 table.

的 ODBC 来实现