Access 中的 T-SQL 直通查询是不是可以包含本地 Access 表?

Posted

技术标签:

【中文标题】Access 中的 T-SQL 直通查询是不是可以包含本地 Access 表?【英文标题】:Possible for T-SQL pass-through query in Access to include a local Access table?Access 中的 T-SQL 直通查询是否可以包含本地 Access 表? 【发布时间】:2015-09-26 18:08:39 【问题描述】:

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

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

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'
"

或者反之亦然,下面的这一部分尝试从链接表更新本地表。

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 中,一个选择查询(在本地 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'
"

非常感谢!

【问题讨论】:

首先,您是否知道“T-SQL”(“Transact-SQL”)是运行在 Microsoft SQL Server 上的 SQL 方言,“Access SQL”是 Access 数据库的方言引擎用途,它们相同? 嗨@GordThompson,感谢您的评论和帮助。是的,我知道 T-SQL 将在 SQL Server 上运行,并且与 Access SQL 不同。虽然我在 Access 方面有几年的基本经验,但我对 T-SQL、SQL Server 和 VB 都是全新的,所以我不知道用 VB 编写 T-SQL 时它们在 Access 中的工作量有多大。谢谢。 “我在 Access DB 中有以下 tsql 脚本(作为 VB 脚本)”是什么意思?虽然是相关的编程基础,但 Access VBA 的处理方式与 VB 或 VB 脚本不同。例如,代码通常通过 Access 对象(表单、查询、报告)触发,而不是直接通过控制台运行。 TSQL 是否位于外部并从 Access 调用?还是此代码在 Access VBA 模块中?还是在表格或报告后面? 【参考方案1】:

是的,从技术上讲,使 Access 表和视图可用于 SQL Server 实例上运行的 T-SQL 代码。这可以通过调整 SQL Server 配置来完成,然后

    将 Access 数据库添加为 SQL Server 中的“链接服务器”,或 在 SQL Server 上运行的 T-SQL 代码中使用 OPENROWSET()

但是,这些方法很少在生产系统中使用,因为所需的 SQL Server 调整(详细信息 here)可能会降低 SQL Server 实例本身的性能和稳定性,并且因为生成的 T-SQL 代码可能会面临性能问题“挑战”类似于使用 ODBC 链接表的 Access SQL 查询所面临的挑战。

在我看来,如果在 SQL Server 上运行的进程中确实且持续需要使用特定表,那么该表应该驻留在 SQL Server 上。任何需要使用该表的 Access 进程仍然可以通过使用 ODBC 链接表来完成。

【讨论】:

以上是关于Access 中的 T-SQL 直通查询是不是可以包含本地 Access 表?的主要内容,如果未能解决你的问题,请参考以下文章

MS Access 直通选择查询导致 SQL Server 中的页面锁定

到 SQL Server 的 MS Access 通用直通查询

Access 数据库直通查询?

MS Access 直通查询更新

将直通查询中的记录附加到本地表

组合查询时的 SQL-server 语法错误(传递查询)