2017-08-30 114 views
-1

是否可以编写使用位于不同服务器上的不同数据库中的表的查询?使用位于不同服务器上的两个数据库中的两个表的写入查询

我有table_1这在数据库中存在“DB1” Server1上并没有存在于Server2上数据库“DB2”另一个表table_2

我该怎么做? 服务器可以是MySQL,HSQL或MS-SQL中的任何一种。这是主要的问题.........有没有不同的服务器,但也是不同类型的服务器。

请问sp_addlinkedserver是否适合这种情况?

+2

[SQL Server中选择从两个不同的服务器数据]的可能的复制(https://stackoverflow.com/questions/1144051/selecting-data-from-two-different-servers-in-sql-server ) –

回答

0

在MS SQL服务器上设置linked servers。然后,你可以查询两台服务器像

SELECT * FROM [server1的]。[数据库]。[DBO]。[表]

SELECT * FROM [服务器2]。[数据库]。 [表]

或使用OPENQUERY(可能是首选的原因这只是发送命令到其它服务器而不是源服务器试图解析它)

+0

当两台服务器都是不同的类型时,这也可以工作吗?例如,一个是hsql和其他MySQL的? – caesar

+0

它会工作是(特别是如果您使用OPENQUERY),但是为了创建链接服务器,您可能需要将其他服务器类型的驱动程序安装到SQL服务器上。这里是如何为MySQL做到这一点的链接。 https://www.mssqltips.com/sqlservertip/4577/create-a-linked-server-to-mysql-from-sql-server/ –

+0

谢谢Element zero.i'll试试这个方法 – caesar

0

你需要使用的sp_addlinkedserver创建一个服务器链接。请参阅reference documentation的使用情况。一旦建立了服务器链接,就可以像平常一样构建查询,只需将数据库名称添加到其他服务器的前缀即可。即:

-- FROM DB1 
SELECT * 
FROM [MyDatabaseOnDB1].[dbo].[MyTable] tab1 
    INNER JOIN [DB2].[MyDatabaseOnDB2].[dbo].[MyOtherTable] tab2 
     ON tab1.ID = tab2.ID 

一旦链路建立,还可以使用OPENQUERY到远程服务器上执行SQL语句,只将数据传送回给你。这可以更快一点,并且它可以让远程服务器优化您的查询。如果您在上面的示例中将数据缓存在DB1上的临时(或内存中)表中,那么您将能够查询它,就像加入标准表一样。例如:

-- Fetch data from the other database server 
SELECT * 
INTO #myTempTable 
FROM OPENQUERY([DB2], 'SELECT * FROM [MyDatabaseOnDB2].[dbo].[MyOtherTable]') 

-- Now I can join my temp table to see the data 
SELECT * FROM [MyDatabaseOnDB1].[dbo].[MyTable] tab1 
    INNER JOIN #myTempTable tab2 ON tab1.ID = tab2.ID 

查看OPENQUERY的文档以查看更多示例。上面的例子很有意思。我肯定会在这个特定的例子中使用第一种方法,但使用OPENQUERY的第二个选项可以节省一些时间和性能,如果您使用查询来过滤掉一些数据。

0

以下查询将会有所帮助。

SELECT TS1.COLUMN01, TS2.COLUMN02 
FROM Server1.DBName..TableName TS1, Server2.DBName..TableName TS2 
WHERE TS1.COLUMN03 = TS2.COLUMN03 
+0

DBName后面有2个小点在查询中? – caesar

+0

是的,否则它会给错误消息像无效的对象名称。 –

相关问题