Stellen Sie über SQLCMD in PowerShell eine Verbindung zu LocalDB her

10

Ich versuche, über PowerShell mit dem Dienstprogramm SQLCMD auf den Server "localdb \ MSSQLLocalDB" auf meinem Computer zuzugreifen. Ich verwende PowerShell v5, .NET v5.0 und der Servername lautet, (localdb)\MSSQLLocalDBwenn ich in Microsoft SQL Server Management Studio 2014 eine Verbindung dazu herstelle.

PS C:\> sqlcmd -S localdb\MSSQLLocalDBund PS C:\> sqlcmd -S .\localdb\MSSQLLocalDBführen zu diesem Fehler:

SQLqd: Fehler: Microsoft ODBC-Treiber 11 für SQL Server: SQL Server-Netzwerkschnittstellen: Fehler beim Auffinden des angegebenen Servers / der angegebenen Instanz [xFFFFFFFF].

Ich habe den Servernamen in Management Studio mit abgefragt SELECT @@ServerNameund diesen nach -Sdem obigen Befehl verwendet und den gleichen Fehler erhalten.

PS C:\> sqlcmd -S localdb gibt diesen Fehler:

SQLqd: Fehler: Microsoft ODBC-Treiber 11 für SQL Server: Named Pipes-Anbieter: Verbindung zu SQL Server konnte nicht hergestellt werden [53]

Weitere Hinweise: Mit dieser Verbindungszeichenfolge kann ich eine Verbindung zum Server herstellen und mit einer Datenbank namens testdb01 in einer C # -Konsolen-App arbeiten System.Data.SqlClient:

"Data Source=(localdb)\\mssqllocaldb;Initial Catalog=testdb01;Integrated Security=SSPI;"
jmk22
quelle

Antworten:

8

Das Gehäuse des Instanznamens spielt keine Rolle.

Sie müssen versuchen:

sqlcmd -S "(localdb)\MSSQLLocalDB" -d testdb01

Der Teil "localdb" muss in Klammern eingeschlossen werden, da dies eine spezielle Syntax ist, die auf eine SQL Server Express LocalDB-spezifische API verweist, die einen automatischen Start der Instanz ermöglicht, wenn in einer Verbindungszeichenfolge verwiesen wird. Der gesamte Instanzname muss in doppelte Anführungszeichen gesetzt werden. Die oben gezeigte Befehlszeile funktioniert für mich zumindest außerhalb von PowerShell.

Solomon Rutzky
quelle
Einschließlich (localdb)in Klammern sehen aus wie es trennt sich als Befehl, und es gibt die folgende Fehlermeldung: Der Begriff ‚localdb‘ wird als Name eines Cmdlets nicht erkannt, Funktion, Skriptdatei oder ein geschriebenes Programm.
jmk22
@ jmk22 Versuchen Sie dann, den gesamten Servernamen in doppelte Anführungszeichen zu setzen : -S "(localdb)\MSSQLLocalDB". Wenn das nicht funktioniert, können wir versuchen, der Klammer zu entkommen. Aber irgendwie müssen diese Eltern da sein.
Solomon Rutzky
1
Die Zitate haben es geschafft, danke! Ich habe Ihre Antwort bearbeitet, um dies widerzuspiegeln.
jmk22