2013-02-28 33 views
6

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.

+0

Dlaczego SERVERNAME \ LOCALDB # SOMEHASH jest niedopuszczalne? –

+0

@RaySaltrelli: Ponieważ nie można go użyć do połączenia się z localdb z kodu w moich testach – carlpett

+0

Wybierz @@ Servername nie jest to, czego potrzebujesz? – granadaCoder

Odpowiedz

3

to:.

SELECT SERVERPROPERTY ('InstanceName') 

EDIT

z link

Podłączenie do wspólnego Instancji LocalDB

Aby połączyć się z udostępnionym instancji LocalDB dodać \ (dot + backslash) do ciągu połączenia, aby odnieść się do przestrzeni nazw zarezerwowanej dla współużytkowanych instancji. Na przykład, aby połączyć się z udostępnioną instancją LocalDB o nazwie AppData, użyj ciągu połączenia, takiego jak (localdb). \ AppData jako część ciągu połączenia. Użytkownik łączący się ze współużytkowaną instancją LocalDB, której nie jest właścicielem, musi mieć uwierzytelnienie Windows Authentication lub SQL Server Authentication.

i

Jeśli aplikacja używa wersję .NET przed 4.0.2 należy podłączyć bezpośrednio do nazwanego potoku z LocalDB. Wartość nazwy instancji instancji jest nazwaną potokiem, której słucha instancja LocalDB. Część nazwy potoku instancji po LOCALDB # zmieni się za każdym razem, gdy uruchomiona zostanie instancja LocalDB. Aby połączyć się z wystąpieniem LocalDB za pomocą SQL Server Management Studio, wpisz nazwę potoku Instance w polu Nazwa serwera okna dialogowego Connect to Database Engine. Z niestandardowego programu można nawiązać połączenie z instancją LocalDB, używając ciągu połączenia podobnego do SqlConnection conn = new SqlConnection(@"Server=np:\\.\pipe\LOCALDB#F365A78E\tsql\query");

+0

To zwraca część 'LOCALDB # SOMEHASH', niestety. – carlpett

+0

Czy znasz [to] (http://msdn.microsoft.com/en-us/library/hh510202.aspx) – shibormot

+0

Tak, a więc moje pytanie. W moim krótkim teście nie mogłem połączyć się z '(localdb) \ LOCALDB # SOMEHASH'. Czy powinienem się spodziewać? – carlpett