2013-02-28 16 views
6

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.

+0

herstellen. Warum ist SERVERNAME \ LOCALDB # SOMEHASH inakzeptabel? –

+0

@RaySaltrelli: Weil es nicht verwendet werden kann, um die Localdb von Code in meinen Tests zu verbinden – carlpett

+0

Wählen Sie @@ Servername ist nicht das, was Sie brauchen? – granadaCoder

Antwort

3

Ist dies:.

SELECT SERVERPROPERTY ('InstanceName') 

EDIT

von link

Verbindung zu einem freigegebenen Instanz von LocalDB

zu einer gemeinsamen Instanz von LocalDB hinzufügen Um eine Verbindung \ (Punkt + Backslash) für die Verbindungszeichenfolge, um auf den für gemeinsam genutzte Instanzen reservierten Namespace zu verweisen. Um beispielsweise eine Verbindung zu einer gemeinsam genutzten Instanz von LocalDB namens AppData herzustellen, verwenden Sie eine Verbindungszeichenfolge wie (localdb). \ AppData als Teil der Verbindungszeichenfolge. Ein Benutzer, der eine Verbindung zu einer freigegebenen Instanz von LocalDB herstellt, die er nicht besitzt, muss über eine Windows-Authentifizierung oder eine SQL Server-Authentifizierungsanmeldung verfügen.

und

Wenn Ihre Anwendung eine Version von .NET verwendet, bevor 4.0.2 müssen Sie direkt auf die Named Pipe des LocalDB verbinden. Der Name der Instanz-Pipe-Name ist die Named Pipe, die die Instanz von LocalDB überwacht. Der Teil des Instance-Pipe-Namens nach LOCALDB # ändert sich jedes Mal, wenn die Instanz von LocalDB gestartet wird. Geben Sie im Feld Servername des Dialogfelds Mit Datenbankmodul verbinden den Instance-Pipe-Namen ein, um eine Verbindung mit der Instanz von LocalDB mithilfe von SQL Server Management Studio herzustellen. Von Ihrem benutzerdefinierten Programm aus können Sie eine Verbindung zur Instanz von LocalDB mit einer Verbindungszeichenfolge ähnlich SqlConnection conn = new SqlConnection(@"Server=np:\\.\pipe\LOCALDB#F365A78E\tsql\query");

+0

Das gibt leider den 'LOCALDB # SOMEHASH' Teil zurück. – carlpett

+0

kennen Sie [diese] (http://msdn.microsoft.com/en-us/library/hh510202.aspx) – shibormot

+0

Ja, und damit meine Frage. In meinem Kurztest konnte ich mich nicht mit '(localdb) \ LOCALDB # SOMEHASH verbinden. Sollte ich erwarten können? – carlpett