Как получить данные со связанных серверов, используя запросы

Я создал linkedserver как ravikiran-vm которая является виртуальной машиной на моем рабочем столе.

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

select * from ravikiran-vm.kiran.employ

но он показывает ошибку "Неверный синтаксис рядом с '-'."

Кто-нибудь может мне помочь?

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

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

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

5 ответов

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

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

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

Итак, вы можете попробовать:

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

Или какой бы ни была ваша схема.

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

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

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

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

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

Вы, вероятно, также не хотите, чтобы все данные возвращались

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');

Пример 2:

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

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

SELECT * FROM OPENQUERY(Linked_Server_Name, 'select * from TableName, где ID = 500')

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)

Другие вопросы по тегам