SQL Server 连接服务器示例查询

113

在Management Studio中,我正在尝试在两个链接服务器之间运行查询/执行联接。下面的SQL语句是否正确:

select foo.id 
from databaseserver1.db1.table1 foo, 
     databaseserver2.db1.table1 bar 
where foo.name=bar.name

基本上,您只需要在数据库表名前加上数据库服务器名称吗?

16个回答

2

就我所知,以下语法效果最佳:

SELECT * FROM [LINKED_SERVER]...[TABLE]

我无法使用其他人的建议来使用数据库名称。此外,此数据源没有模式。


1

我已经使用openquery查找了link_server表中的数据类型,并且结果是成功的。

SELECT * FROM OPENQUERY (LINKSERVERNAME, '
SELECT DATA_TYPE, COLUMN_NAME
FROM [DATABASENAME].INFORMATION_SCHEMA.COLUMNS
WHERE 
     TABLE_NAME  =''TABLENAME''
')

对我很有用


0

以下查询最佳。

尝试使用此查询:

SELECT * FROM OPENQUERY([LINKED_SERVER_NAME], 'SELECT * FROM [DATABASE_NAME].[SCHEMA].[TABLE_NAME]')

非常有帮助将MySQL链接到MS SQL。

0

你尝试过在名字的周围添加引号吗?

像这样:

select foo.id 
from "databaseserver1".db1.table1 foo, 
     "databaseserver2".db1.table1 bar 
where foo.name=bar.name

0

对于MariaDB(可能也适用于MySQL),尝试使用三点语法指定模式是无效的,会导致错误“模式或目录的使用无效”。以下解决方案有效:

  1. 在SSMS中,转到“服务器对象”>“链接服务器”>“提供程序”>“MSDASQL”
  2. 确保“动态参数”、“仅零级”和“允许进程内”都被选中

然后,您可以使用以下语法查询任何模式和表:

SELECT TOP 10 *
FROM LinkedServerName...[SchemaName.TableName]

来源:在不使用OpenQuery的情况下使用SQL Server连接MySQL联接服务器SELECT * FROM


0

PostgreSQL

  1. 在数据源DSN中必须提供数据库名称
  2. 管理员身份运行管理工具。
  3. 您必须从查询中省略DBName

    SELECT * FROM OPENQUERY([LinkedServer], 'select * from schema."tablename"')


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接