2013-02-28 7 views
6

Per un server SQL non LocalDb, posso SELECT SERVERPROPERTY('ServerName') ottenere il nome del server e l'istanza su cui sono in esecuzione. Per un server LocalDb, tuttavia, ottengo SERVERNAME\LOCALDB#SOMEHASH. Come posso ottenere il nome dell'istanza locale?Come determinare il nome dell'istanza LocalDb nello script SQL?

SOLUZIONE:

La soluzione per ottenere l'istanza, lavorando su entrambi LocalDB e "normali" le istanze di 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')) 

Alcuni retroscena che avrei citato nella domanda iniziale: Abbiamo un database di configurazione per la nostra applicazione. Tra le altre cose, memorizza le stringhe di connessione. Per macchine sviluppatrici e test di integrazione, vogliamo essere in grado di generare un database con uno script e fare in modo che la stringa di connessione faccia riferimento all'istanza locale. Quindi, ho bisogno di avere una stringa di connessione funzionante (che non è LOCALDB#SOMEHASH). Dato che c'è una certa diffusione nell'edizione del server di database, avevo bisogno di qualcosa che potesse gestire entrambi i casi.

+0

Perché SERVERNAME \ LOCALDB # SOMEHASH non è accettabile? –

+0

@RaySaltrelli: Perché non può essere utilizzato per connettersi al localdb dal codice nei miei test – carlpett

+0

Seleziona @@ Il servername non è quello che ti serve? – granadaCoder

risposta

3

è questo:.

SELECT SERVERPROPERTY ('InstanceName') 

EDIT

da link

connessione a un'istanza condivisa di LocalDB

Per connettersi a un'istanza condivisa di LocalDB aggiungere \ (dot + backslash) alla stringa di connessione per fare riferimento allo spazio dei nomi riservato alle istanze condivise. Ad esempio, per connettersi a un'istanza condivisa di LocalDB denominata AppData, utilizzare una stringa di connessione come (localdb). \ AppData come parte della stringa di connessione. Un utente che si connette a un'istanza condivisa di LocalDB di cui non è proprietario deve disporre dell'autenticazione di autenticazione di Windows o dell'autenticazione di SQL Server.

e

Se l'applicazione utilizza una versione di .NET prima di 4.0.2 è necessario collegare direttamente alla named pipe del LocalDB. Il valore del nome della pipe Instance è la named pipe che l'istanza di LocalDB sta ascoltando. La parte del nome della pipe di istanza dopo LOCALDB # cambia ogni volta che viene avviata l'istanza di LocalDB. Per connettersi all'istanza di LocalDB utilizzando SQL Server Management Studio, digitare il nome della pipe di istanza nella casella Nome server della finestra di dialogo Connetti a Database Engine. Dal tuo programma personalizzato puoi stabilire una connessione all'istanza di LocalDB usando una stringa di connessione simile a SqlConnection conn = new SqlConnection(@"Server=np:\\.\pipe\LOCALDB#F365A78E\tsql\query");

+0

Questo restituisce la parte 'LOCALDB # SOMEHASH', sfortunatamente. – carlpett

+0

hai familiarità con [questo] (http://msdn.microsoft.com/en-us/library/hh510202.aspx) – shibormot

+0

Sì, e quindi la mia domanda. Almeno nel mio test rapido, non potevo connettermi a '(localdb) \ LOCALDB # SOMEHASH'. Dovrei aspettarmi di essere in grado di? – carlpett