Как получить данные со связанных серверов, используя запросы
Я создал 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)