Как получить данные со связанных серверов, используя запросы - PullRequest
8 голосов
/ 27 апреля 2009

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

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

select * from ravikiran-vm.kiran.employ

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

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

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

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

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

Ответы [ 6 ]

16 голосов
/ 27 апреля 2009

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

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

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

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

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

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

5 голосов
/ 27 апреля 2009

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

SELECT * FROM OPENQUERY([ravikiran-vm],'SELECT * FROM KIRAN..EMPLOY')
2 голосов
/ 27 апреля 2009

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

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

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

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

0 голосов
/ 24 мая 2019
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');
0 голосов
/ 31 мая 2016
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)

0 голосов
/ 02 марта 2016

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...