在Management Studio中,我正在尝试在两个链接服务器之间运行查询/执行联接。下面的SQL语句是否正确:
select foo.id
from databaseserver1.db1.table1 foo,
databaseserver2.db1.table1 bar
where foo.name=bar.name
基本上,您只需要在数据库表名前加上数据库服务器名称吗?
在Management Studio中,我正在尝试在两个链接服务器之间运行查询/执行联接。下面的SQL语句是否正确:
select foo.id
from databaseserver1.db1.table1 foo,
databaseserver2.db1.table1 bar
where foo.name=bar.name
基本上,您只需要在数据库表名前加上数据库服务器名称吗?
就我所知,以下语法效果最佳:
SELECT * FROM [LINKED_SERVER]...[TABLE]
我无法使用其他人的建议来使用数据库名称。此外,此数据源没有模式。
我已经使用openquery查找了link_server表中的数据类型,并且结果是成功的。
SELECT * FROM OPENQUERY (LINKSERVERNAME, '
SELECT DATA_TYPE, COLUMN_NAME
FROM [DATABASENAME].INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME =''TABLENAME''
')
对我很有用
以下查询最佳。
尝试使用此查询:
SELECT * FROM OPENQUERY([LINKED_SERVER_NAME], 'SELECT * FROM [DATABASE_NAME].[SCHEMA].[TABLE_NAME]')
你尝试过在名字的周围添加引号吗?
像这样:
select foo.id
from "databaseserver1".db1.table1 foo,
"databaseserver2".db1.table1 bar
where foo.name=bar.name
对于MariaDB(可能也适用于MySQL),尝试使用三点语法指定模式是无效的,会导致错误“模式或目录的使用无效”。以下解决方案有效:
然后,您可以使用以下语法查询任何模式和表:
SELECT TOP 10 *
FROM LinkedServerName...[SchemaName.TableName]
PostgreSQL:
您必须从查询中省略DBName:
SELECT * FROM OPENQUERY([LinkedServer], 'select * from schema."tablename"')