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 中的页面锁定