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.
Perché SERVERNAME \ LOCALDB # SOMEHASH non è accettabile? –
@RaySaltrelli: Perché non può essere utilizzato per connettersi al localdb dal codice nei miei test – carlpett
Seleziona @@ Il servername non è quello che ti serve? – granadaCoder