Как ссылаться на сервер sql с обратной косой чертой (\) в его имени? - PullRequest
12 голосов
/ 31 марта 2010

Гивенс:

  • Один SQL-сервер называется: DevServerA
  • Другой назван: DevServerB\2K5

Проблема:

С DevServerA, как мне написать запрос, который ссылается на DevServerB\2K5?

Я попробовал образец фиктивного запроса (запустив его с DevServerA):

SELECT TOP 1 *  
FROM DevServerB\2K5.master.sys.tables

И я получаю ошибку:

Msg 102, Level 15, State 1, Line 2
Incorrect syntax near '\.'.

Однако я знаю, что мой синтаксис почти правильный, так как работает наоборот (выполнение этого запроса из DevServerB\2K5):

SELECT TOP 1 *  
FROM DevServerA.master.sys.tables

Пожалуйста, помогите мне разобраться, как ссылаться на DevServerB\2K5 из DevServerA. Спасибо.

Ответы [ 3 ]

17 голосов
/ 31 марта 2010

В именах из 4 частей первая часть, если имя связанного сервера (т. Е. Объект метаданных), а не имя сервера (т. Е. Имя хоста). Таким образом, вы можете назвать свой связанный сервер FOO и указать ему на хост BAR или на экземпляр FOO \ BAR. И даже если вы указываете, что связанный объект сервера содержит слеш, вы все равно можете использовать его в имени, состоящем из нескольких частей, просто заключив его в кавычки:

SELECT TOP 1 *  
FROM [DevServerB\2K5].master.sys.tables
6 голосов
/ 31 марта 2010

Попробуйте использовать квадратные скобки:

SELECT TOP 1 *  
FROM [DevServerB\2K5].master.sys.tables
0 голосов
/ 10 апреля 2010

В SQL SERVER 2005 произошло следующее: Вступление:

SELECT TOP 1 *   
FROM [DevServerB\2K5].master.sys.tables 

Изменено на

SELECT TOP 1 *   
FROM DevServerB\2K5.master.sys.tables 

системой SQL Server, и вы по-прежнему получаете сообщение об ошибке: Неверный синтаксис рядом с '.'.

Я пробовал это на связанном сервере, названном двумя разными способами: '[DevServerB \ 2K5]' и 'DevServerB \ 2K5'

У кого-нибудь есть другие идеи?

Спасибо, Алан Робертсон

Исправление добавлено на следующий день: я был неправ, частично. Когда кто-то пытается создать представление, используя оператор SQL, например:

SELECT  *
FROM [DevServerB\2K5].TestDB.dbo.tables 

тогда [и] удаляются, и нельзя сохранить вид, НО, если кто-то просто пишет запрос, используя ту же строку SQL, он работает правильно.

Мне также удалось выполнить инструкцию SQL, например:

INSERT INTO [DevServerB\2K5].TestDB.dbo.tables ( ... ) ...

Я могу делать то, что хотел, но было бы намного лучше, если бы я мог сохранить представление и использовать представление, которое затем использовалось бы для SELECT, INSERT и UPDATE таблицы в [DevServerB \ 2K5]. База данных TestDB с исходного сервера, на котором я пытался и не смог создать представление из-за '\'.

-ASR-

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