Проверьте, работает ли именованный экземпляр SQL Server на локальном компьютере или нет - PullRequest
0 голосов
/ 03 июля 2018

Возможно, вы найдете дубликат вопроса для этих двух ссылок ( Ссылка1 и Ссылка2 ), но на них не был дан правильный ответ. Позвольте мне проинформировать вас о том, чего я действительно хочу.

Ищу

Я ищу способ, с помощью которого мы можем проверить, является ли предоставленное Имя экземпляра SQL локально доступным или находится на другом удаленном компьютере.

Мой локальный экземпляр SQL Server называется Office-PC \ SQLEXPRESS

Решения, которые я нашел, которые не работали

1) Источник : Когда я использую приведенный ниже код, он говорит: remote , в то время как указанный экземпляр присутствует local .

SELECT Case when HOST_NAME()=SERVERPROPERTY('Office-PC\SQLEXPRESS') then 'local' else 'remote' end

2) Я пытался использовать приведенный ниже код, предложенный во многих комментариях на разных сайтах. Но он показывает неправильный вывод.

print HOST_NAME()    //OUTPUT : Office-PC
print @@SERVERNAME   //OUTPUT : HOME\SQLEXPRESS

3) Некоторые люди предложили использовать приведенную ниже команду для получения имени экземпляра, которое отлично работает, но не говорит нам, какой из экземпляров доступен локально.

SQLCMD -L

4) Я также где-то читал (не могу найти ссылку), что мы можем получить имя экземпляра из Registry .

Это все, что я мог найти.

Если у кого-то есть другие способы узнать, является ли предоставленный именованный экземпляр SQL локально доступным, пожалуйста, сообщите мне.

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

Это немного сложнее, чем хотелось бы, но HOST_NAME() или имя компьютера-сервера ненадежны, следует выполнить следующее:

SELECT CASE 
    WHEN client_net_address IN ('<local machine>', '<named pipe>', local_net_address) THEN 'local' 
    ELSE 'remote' 
END AS [ConnectionType]
FROM sys.dm_exec_connections 
-- The parent_connection_id check covers MARS
WHERE session_id = @@SPID  AND parent_connection_id IS NULL

Отказ от ответственности: не полностью протестирован со всеми возможными видами транспорта. Это работает против соединений с локальной памятью, экземпляров LocalDB и соединений TCP / IP, но может работать некорректно, если вы используете (редко) удаленные именованные каналы или транспорты VIA. По умолчанию они отключены.

0 голосов
/ 03 июля 2018

Вы можете использовать SERVERPROPERTY вот так:

SELECT CASE WHEN HOST_NAME()=SERVERPROPERTY('MachineName') THEN 'local' ELSE 'remote' END

MachineName

Имя компьютера Windows, на котором работает экземпляр сервера.

Для кластеризованного экземпляра - экземпляр SQL Server, работающий на виртуальный сервер в Microsoft Cluster Service, он возвращает имя виртуальный сервер.

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