如何使用查询从链接的服务器获取数据

时间:2009-04-27 14:42:30

标签: sql-server sql-server-2005

我创建了一个linkedserver作为ravikiran-vm,这是我桌面上的虚拟机。

现在我有一个名为kiran的数据库,其中包含一个employ表 要检索employ数据,请执行以下操作:

select * from ravikiran-vm.kiran.employ

但它显示错误“' - '附近的语法不正确。”

有人可以帮助我吗?

提前致谢。

非常感谢你们支持它工作得很好...... 现在我要安排这个作为一个新工作。当我正常执行它时,它显示o / p。 但是当我提供与sqlserver代理作业相同的查询时,它会给出错误并且查询不执行... Plz在这方面帮助我

提前致谢

6 个答案:

答案 0 :(得分:16)

我认为您应该更改链接服务器的名称,因为 - char在SQL中保留。

您可以尝试用括号括起名称,但它会变得无聊

此外,您应该在查询中包含架构名称,或者双点以使用默认值:

所以,你可以尝试:

select * from [ravikiran-vm].kiran.dbo.employ
select * from [ravikiran-vm].kiran..employ

或者你的架构是什么。

答案 1 :(得分:5)

您必须使用OPENQUERY

SELECT * FROM OPENQUERY([ravikiran-vm],'SELECT * FROM KIRAN..EMPLOY')

答案 2 :(得分:2)

从链接服务器获取数据,使用4部分表示法 Server.Database.Schema.Table

由于您的姓名( - )中包含无效字符,因此您需要在名称

周围添加括号
select * from [ravikiran-vm].kiran..employ

您可能也不希望返回所有数据

答案 3 :(得分:0)

通常直接查询不应该用于链接服务器,因为它大量使用SQL Server的临时数据库。在第一步,将数据检索到临时DB中,然后进行过滤。关于这一点有很多线索。最好使用open OPENQUERY ,因为它将SQL传递给源链接服务器,然后返回过滤后的结果,例如。

SELECT * FROM OPENQUERY(Linked_Server_Name,'select * from TableName,其中ID = 500')

答案 4 :(得分:0)

1- Link the server

EXEC sp_addlinkedserver 'OracleSvr', 
'Oracle 7.3', 
'MSDAORA', 
'ORCLDB'


2-SELECT
SELECT *
FROM OPENQUERY(OracleSvr, 'SELECT name, id FROM albert.titles')

3-UPDATE 
UPDATE OPENQUERY (OracleSvr, 'SELECT name FROM albert.titles WHERE id = 101') 

4-INSERT
INSERT OPENQUERY (OracleSvr, 'SELECT name FROM albert.titles')
VALUES ('NewTitle');

5-DELETE
DELETE OPENQUERY (OracleSvr, 'SELECT name FROM albert.titles WHERE name = ''NewTitle''')

我刚从这里复制(http://www.sqlservercentral.com/Forums/Topic916320-392-1.aspx

答案 5 :(得分:0)

Select * from likedservername.databasename.dbo(schema).tablename

Ex1:

select * from [Bse].[Bse].[dbo].Binary

Else

Select * from openquery (linkedservername, 'select * from databasename.dbo(schema).tablename');

Ex2:

select * from openquery ([Bse], 'select * from [Bse].[dbo].Binary');