W przypadku serwera SQL innego niż LocalDb można uzyskać SELECT SERVERPROPERTY('ServerName')
, aby uzyskać nazwę serwera i instancji, na której działam. W przypadku serwera LocalDb dostaję jednak SERVERNAME\LOCALDB#SOMEHASH
. Jak mogę uzyskać nazwę lokalnej instancji?Jak określić nazwę instancji LocalDb w skrypcie SQL?
ROZWIĄZANIE:
Rozwiązaniem coraz instancji, pracując zarówno LocalDB i „normalnych” przypadkach serwera SQL:
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'))
Niektóre tła że powinienem wymienić na oryginalne pytanie: Posiadamy bazę danych konfiguracji dla naszej aplikacji. Między innymi przechowuje ciągi połączeń. W przypadku komputerów deweloperskich i testów integracji chcemy mieć możliwość generowania bazy danych za pomocą skryptu, a ciąg połączenia powinien odnosić się do instancji lokalnej. Tak więc potrzebuję działającego ciągu połączenia (który nie jest zgodny z LOCALDB#SOMEHASH
). Ponieważ w wersji serwera baz danych jest trochę rozproszonych, potrzebowałem czegoś, co mogłoby obsłużyć oba przypadki.
Dlaczego SERVERNAME \ LOCALDB # SOMEHASH jest niedopuszczalne? –
@RaySaltrelli: Ponieważ nie można go użyć do połączenia się z localdb z kodu w moich testach – carlpett
Wybierz @@ Servername nie jest to, czego potrzebujesz? – granadaCoder