我正在使用一个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'
"
非常感谢!
答案 0 :(得分:3)
是的,技术上可以使Access表和视图可用于在SQL Server实例上运行的T-SQL代码。这可以通过调整SQL Server配置然后
来完成OPENROWSET()
。但是,这些方法很少用于生产系统,因为所需的SQL Server调整(详细信息here)可能会降低SQL Server实例本身的性能和稳定性,并且因为生成的T-SQL代码可以面对性能“挑战”类似于使用ODBC链接表的Access SQL查询所面临的挑战。
在我看来,如果确实需要在SQL Server上运行的进程中使用特定的表,那么该表应该驻留在SQL Server上。任何需要使用该表的Access进程仍然可以使用ODBC链接表来执行此操作。