伪造跨越数据库服务器的sql语句,以便在使用DBI的perl脚本中使用

时间:2013-08-16 06:14:11

标签: sql sql-server perl ms-access dbi

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);

IF 两个表都在同一个数据库中,因为只有一个数据库句柄在运行。 但我的表位于不同的数据库中,实际上在不同的服务器中 - dbo.ServerOne位于SqlServer的实例中,而noteTable位于Access数据库中(抱歉)。

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

坦率地说,我无法看到如何在一次传递中实现这一点 - 一个sql命令可以使用多个db句柄吗? 如果没有,我必须使用两个单独的命令,即dbo.ServerOne上的UPDATE和noteTable上的SELECT,如何设置它以适用于MEMO / nvarchar(max)字段?我的意思是,如何将数据存储在表之间? CLOB?

TIA,

仍在学习史蒂夫

2 个答案:

答案 0 :(得分:1)

你好运 - 两个表可以在同一个数据库中。

你需要google for is"链接表"。有brief overview here但基本上它允许您通过ODBC(或其他支持的连接方法)添加外部表。

您可以将Access表链接到SQL Server数据库,或者反过来。这取决于Access文件是否位于固定位置以及大多数数据位于何处。从较大的链接到较小的链接可能更有效。

话虽如此,我希望SQL Server能够更聪明地规划/执行查询,所以我先尝试一下。

答案 1 :(得分:0)

由于我们已经将Access表中的数据存入SqlServer表,因此我决定通过将两个表中的字段添加到共享密钥字段上键入的hashref来进行JOIN。不像我想的那么优雅,但它有效。

感谢所有回复的人!

CASE CLOSED

仍在学习史蒂夫