首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >比较不同服务器上的表

比较不同服务器上的表
EN

Stack Overflow用户
提问于 2014-05-28 13:11:51
回答 3查看 1.5K关注 0票数 0

使用java和Server 2008,我需要比较两个表的内容,需要记住的是,它们位于不同的服务器上,因此我有一个连接到第一个服务器(让我们称之为conn1)和一个连接到第二个服务器(让我们称之为conn2)。我将表复制到临时表中,然后尝试使用use操作符来比较临时表。

在java中尝试这样做的一个非常基本的例子:

代码语言:javascript
运行
复制
String s1 = "select * into #temp1 from FACTOR";
String s2 = "select * into #temp2 from FACTOR'";
String s3 = "SELECT * FROM #temp1 EXCEPT SELECT * FROM #temp2";

Statement st = null;
ResultSet rs = null;
st = conn1.createStatement();
st.execute(s1);

Statement st1 = null;
ResultSet rs1 = null;
st1 = conn2.createStatement();
st1.execute(s2);

Statement st3 = null;
ResultSet rs3 = null;
st3 = conn2.createStatement();
rs3 = st3.executeQuery(s3);

在上面的代码片段中的最后一行中,我得到了以下错误:

代码语言:javascript
运行
复制
Stack trace:java.sql.SQLException: Invalid object name '#temp1'.

是因为我使用到不同服务器的两个连接,conn2看不到#temp1吗?

你知道我该怎么做吗?

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-05-28 13:28:01

你想做的事毫无意义。记住,SQL是在Server上执行的,而不是在Java中执行的。因此,如果两个SQL服务器不能相互看到,则不能跨SQL服务器执行无法相互查看的查询。

一种解决方案是在这两个服务器上执行查询,并将数据输入到java ResultSet中,然后在Java中处理数据。

或者,将所有数据复制到一个Server,并在该服务器上执行除其他查询

票数 0
EN

Stack Overflow用户

发布于 2014-05-28 13:18:33

如果SQL服务器可以“看到”对方,那么您可以通过一个连接完成整个过程:

代码语言:javascript
运行
复制
"SELECT * FROM Server1.database.schema.FACTOR
EXCEPT
SELECT * FROM Server2.database.schema.Factor"

我建议列出列名,以防将来发生变化。

票数 0
EN

Stack Overflow用户

发布于 2014-05-28 13:26:01

普通的临时表只对它们在其中使用的连接可见。由'#‘而不是’#‘表示的全局临时表对多个连接是可见的,但是当创建它们的连接关闭时就消失了。

最好在使用链接服务器的存储过程中这样做。例如:

代码语言:javascript
运行
复制
CREATE PROCEDURE uspCompareTables
AS
BEGIN
     select * from Factor
     EXCEPT
     select * from OTHER_SERVER.dbo.Factor
END

然后您就可以从您的java应用程序调用它。用正常的..。

代码语言:javascript
运行
复制
exec uspCompareTables
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23912600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档