Connectez-vous à LocalDB via SQLCMD dans PowerShell

10

J'essaie d'accéder au serveur "localdb \ MSSQLLocalDB" sur mon ordinateur via PowerShell avec l'utilitaire SQLCMD. J'utilise PowerShell v5, .NET v5.0, et le nom du serveur est (localdb)\MSSQLLocalDBlorsque je me connecte à celui-ci dans Microsoft SQL Server Management Studio 2014.

PS C:\> sqlcmd -S localdb\MSSQLLocalDBet PS C:\> sqlcmd -S .\localdb\MSSQLLocalDBentraîner cette erreur:

Sqlcmd: erreur: pilote ODBC Microsoft 11 pour SQL Server: interfaces réseau SQL Server: erreur de localisation du serveur / de l'instance spécifiée [xFFFFFFFF].

J'ai interrogé le nom du serveur dans Management Studio avec SELECT @@ServerNameet l' ai utilisé après la -Scommande ci-dessus et j'ai obtenu la même erreur.

PS C:\> sqlcmd -S localdb donne cette erreur:

Sqlcmd: erreur: pilote ODBC Microsoft 11 pour SQL Server: fournisseur de canaux nommés: impossible d'ouvrir une connexion à SQL Server [53]

Autres notes: je peux me connecter au serveur et travailler avec une base de données nommée testdb01 dans une application console C # en utilisant System.Data.SqlClientavec cette chaîne de connexion:

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

Réponses:

8

La casse du nom d'instance n'a pas d'importance.

Vous devez essayer:

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

La partie "localdb" doit être placée entre parenthèses car il s'agit d'une syntaxe spéciale qui pointe vers une API spécifique à SQL Server Express LocalDB qui permet le démarrage automatique de l'instance lors du référencement dans une chaîne de connexion. Le nom complet de l'instance doit être placé entre guillemets doubles. La ligne de commande ci-dessus fonctionne pour moi, au moins en dehors de PowerShell.

Solomon Rutzky
la source
L'inclusion (localdb)entre parenthèses semble la séparer en tant que commande et cela donne l'erreur suivante: Le terme «localdb» n'est pas reconnu comme le nom d'une applet de commande, d'une fonction, d'un fichier de script ou d'un programme exploitable.
jmk22
@ jmk22 ensuite essayer de mettre le nom complet du serveur guillemets doubles: -S "(localdb)\MSSQLLocalDB". Si cela ne fonctionne pas, nous pouvons essayer d'échapper à la parenthèse. Mais d'une manière ou d'une autre, ces parens doivent être là.
Solomon Rutzky
1
Les citations l'ont fait, merci! J'ai modifié votre réponse pour refléter cela.
jmk22