Для SQL Server, отличного от LocalDb, я могу SELECT SERVERPROPERTY('ServerName')
получить имя сервера и экземпляр, на котором я работаю. Однако для сервера LocalDb я получаю SERVERNAME\LOCALDB#SOMEHASH
. Как я могу получить имя локального экземпляра?
РЕШЕНИЕ:
Решение для получения экземпляра, работающего как с LocalDB, так и с «обычными» экземплярами SQL Server:
DECLARE @serverName NVARCHAR(151)
IF SERVERPROPERTY('IsLocalDb') = 1
SELECT @serverName = 'np:\\.\pipe\' + CONVERT(NVARCHAR(128), SERVERPROPERTY('InstanceName')) + '\tsql\query'
ELSE
SELECT @serverName = CONVERT(NVARCHAR(128), SERVERPROPERTY('ServerName'))
Некоторая предыстория, которую я должен был упомянуть в исходном вопросе: у нас есть база данных конфигурации для нашего приложения. Среди прочего, он хранит строки подключения. Для компьютеров разработчиков и интеграционных тестов мы хотим иметь возможность генерировать базу данных с помощью скрипта, а строка подключения должна ссылаться на локальный экземпляр. Таким образом, мне нужно иметь рабочую строку подключения (которой LOCALDB#SOMEHASH
нет). Поскольку в редакции сервера базы данных есть некоторый разброс, мне нужно было что-то, что могло бы справиться с обоими случаями.
SERVERPROPERTY('ServerName')
- person carlpett   schedule 28.02.2013