Access中的T-SQL传递查询可能包含本地Access表吗?

时间:2015-09-26 18:08:39

标签: sql-server tsql ms-access access-vba ms-access-2010

我正在使用一个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中,一个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'
"

非常感谢!

1 个答案:

答案 0 :(得分:3)

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

来完成
  1. 在SQL Server中将Access数据库添加为“链接服务器”,或
  2. 在SQL Server上运行的T-SQL代码中使用OPENROWSET()
  3. 但是,这些方法很少用于生产系统,因为所需的SQL Server调整(详细信息here)可能会降低SQL Server实例本身的性能和稳定性,并且因为生成的T-SQL代码可以面对性能“挑战”类似于使用ODBC链接表的Access SQL查询所面临的挑战。

    在我看来,如果确实需要在SQL Server上运行的进程中使用特定的表,那么该表应该驻留在SQL Server上。任何需要使用该表的Access进程仍然可以使用ODBC链接表来执行此操作。