Für einen Nicht-LocalDb-SQL-Server kann ich SELECT SERVERPROPERTY('ServerName')
den Namen des Servers und der Instanz abrufen, auf der ich ausgeführt werde. Für einen LocalDb-Server erhalte ich jedoch SERVERNAME\LOCALDB#SOMEHASH
. Wie kann ich den Namen der lokalen Instanz abrufen?Wie kann ich den LocalDb-Instanznamen im SQL-Skript ermitteln?
LÖSUNG:
Die Lösung für die Instanz bekommen, arbeiten sowohl LocalDB und "normalen" SQL Server-Instanzen:
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'))
Einige Hintergrundinformationen, die ich in der ursprünglichen Frage erwähnt haben sollte: Wir haben eine Konfigurationsdatenbank für unsere Anwendung. Unter anderem speichert es Verbindungszeichenfolgen. Für Entwicklermaschinen und Integrationstests möchten wir in der Lage sein, eine Datenbank mit einem Skript zu generieren und die Verbindungszeichenfolge auf die lokale Instanz verweisen zu lassen. Daher muss ich eine funktionierende Verbindungszeichenfolge haben (was nicht LOCALDB#SOMEHASH
ist). Da es in der Edition des Datenbankservers einige Unterschiede gibt, brauchte ich etwas, das beide Fälle bewältigen konnte.
herstellen. Warum ist SERVERNAME \ LOCALDB # SOMEHASH inakzeptabel? –
@RaySaltrelli: Weil es nicht verwendet werden kann, um die Localdb von Code in meinen Tests zu verbinden – carlpett
Wählen Sie @@ Servername ist nicht das, was Sie brauchen? – granadaCoder