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,
仍在学习史蒂夫
答案 0 :(得分:1)
你好运 - 两个表可以在同一个数据库中。
你需要google for is"链接表"。有brief overview here但基本上它允许您通过ODBC(或其他支持的连接方法)添加外部表。
您可以将Access表链接到SQL Server数据库,或者反过来。这取决于Access文件是否位于固定位置以及大多数数据位于何处。从较大的链接到较小的链接可能更有效。
话虽如此,我希望SQL Server能够更聪明地规划/执行查询,所以我先尝试一下。
答案 1 :(得分:0)
由于我们已经将Access表中的数据存入SqlServer表,因此我决定通过将两个表中的字段添加到共享密钥字段上键入的hashref来进行JOIN。不像我想的那么优雅,但它有效。
感谢所有回复的人!
CASE CLOSED
仍在学习史蒂夫