2009-04-27 6 views
7

Я создал linkedserver как ravikiran-vm, который является виртуальной машиной на моем рабочем столе.Как получить данные с связанных серверов с помощью запросов

Теперь у меня есть база данных kiran, которая содержит таблицу employ.
Для получения employ данных, я следующее:

select * from ravikiran-vm.kiran.employ 

но он показывает ошибку «Неправильный синтаксис около„-“.»

Может ли кто-нибудь помочь мне, пожалуйста?

Заранее благодарен.

Спасибо, ребята, что ур поддерживает работу ... Теперь я хочу запланировать это как новое задание. Когда я выполняю его, как обычно, он показывает o/p. но когда я cinfigure тот же запрос, как работа SQLServer агенты он дает ошибку и запрос не выполняется ... Plz помочь мне в этом отношении

Заранее спасибо

ответ

14

Я думаю, вы должны изменить имя связанного сервера , поскольку символ - char зарезервирован в SQL.

Вы можете попробовать окружая имя со скобками, но это становится скучным

Кроме того, вы должны включать имя схемы в запросе, или двойную точку, чтобы использовать по умолчанию один:

так, вы можете попробуйте:

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

Или что бы ни была ваша схема.

+0

Благодаря ур пост был полезным – 2009-04-28 04:43:14

+0

вы приветствуете, радуясь за полезность –

2

, чтобы получить данные из связанного сервера используется 4 части обозначения Server.Database.Schema.Table

, поскольку у вас есть недопустимый символ в вашем имени (-) вам нужно добавить скобки вокруг имени

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

Вы, наверное, и не хотите, чтобы все данные, возвращаемые

5

Вы должны использовать OPENQUERY:

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

Спасибо за сообщение спасибо. .....спасибо за поддержку ур – 2009-04-28 04:44:59

+0

Да. Это был единственный способ сделать это. Спасибо. Сэкономил мне часы! – Fandango68

0

Обычно прямые запросы не должны использоваться в случае связанного сервера, поскольку они в значительной степени используют временную базу данных SQL-сервера. На первом этапе данные извлекаются во временную БД, затем происходит фильтрация. Об этом очень много. Лучше использовать открытый OPENQUERY, поскольку он передает SQL на исходный связанный сервер, а затем возвращает результаты фильтрации, например.

SELECT * FROM OPENQUERY (Linked_Server_Name 'выберите * из TableName где ID = 500')

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)

Смежные вопросы