2

perl 5.10 访问 2010 SqlServer 2008 R2

所以我需要用表 B 中的数据更新表 A 中的一列,其中 A 和 B 有一个我可以加入的列。

这会很好用

$sqlCmd = "UPDATE aa SET aa.foo = bb.fancyfoo " .
          "FROM [dbo.serverOne] AS aa " .
          "RIGHT JOIN [noteTable] AS bb " .
          "ON aa.[recid] = bb.[recid] " ;
$sth = $dbh->prepare( $sqlCmd);

如果两个表都在同一个数据库中,因为只有一个数据库句柄在使用。但是我的表驻留在不同的数据库中,实际上在不同的服务器中——dbo.ServerOne 驻留在 SqlServer 的实例中,而 noteTable 驻留在 Access 数据库中(抱歉)。

对于额外添加的香料,bb.fancyfoo 被定义为 MEMO,aa.foo 被定义为 nvarchar(max)

坦率地说,我看不出这是如何一次性实现的——一个 sql 命令可以使用多个数据库句柄吗?如果不是,我必须使用两个单独的命令,即 dbo.ServerOne 上的 UPDATE 和 noteTable 上的 SELECT,如何设置它以适用于 MEMO/nvarchar(max) 字段?我的意思是,我应该如何将数据存储在表之间?克洛布?

TIA,

仍在学习的史蒂夫

4

2 回答 2

1

你很幸运——两个表可以在同一个数据库中。

您需要搜索的是“链接表”。这里有一个简短的概述,但基本上它允许您通过 ODBC(或其他支持的连接方法)添加外部表。

您可以将 Access 表链接到 SQL Server DB 或以其他方式链接。这取决于 Access 文件是否位于固定位置以及您的大部分数据在哪里。从较大的链接到较小的链接可能更有效。

话虽如此,我希望 SQL Server 在计划/执行查询方面更聪明,所以我会先尝试。

于 2013-08-16T07:00:02.660 回答
0

由于我们已经将 Access 表中的数据转移到 SqlServer 表中,因此我决定通过将两个表中的字段添加到以共享键字段为键的 hashref 来执行 JOIN。没有我想要的那么优雅,但它确实有效。

感谢所有回复的人!

结案

仍在学习的史蒂夫

于 2013-08-21T00:20:31.370 回答