「でもなぜ...?」
理由に興味のある方へ SQL Server Management Studio(SSMS)は、servername\instance
に接続できます 他のアプリケーション(pyodbcアプリなど)ではできませんが、SSMSがWindowsレジストリのポート番号のMRU(最近使用された)リストを保持しているためです
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SuperSocketNetLib\LastConnect
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\MSSQLServer\Client\SuperSocketNetLib\LastConnect
各MRUエントリ(レジストリ値)は次のようになります。
Name: PANORAMA\SQLEXPRESS
Type: REG_SZ
Data: -1006030326:tcp:PANORAMA,52865
SSMSは、リモートマシンのSQLブラウザサービスを介してインスタンス名で正常に接続されると、ポート番号が変更されていない限り、SQLブラウザがリモートマシンで実行されていなくても、インスタンス名で接続を継続できます。このMRUリストを使用しないアプリ(pyodbcアプリなど)は、インスタンス名で接続するたびに、リモートマシンでSQLブラウザサービスを実行する必要があります。
最も一般的なシナリオ:
-
YOUR-PC\SQLEXPRESS
に接続したい 。MY-PC
のSSMSからそれを試してみます 、ただし、SQLブラウザがYOUR-PC
で「StartMode」を「Manual」に設定してインストールされているため、機能しません。 。 -
YOUR-PC
でSQLブラウザサービスを開始するようお願いします 、そしてあなたは親切に従いますが、あなたはただサービスを開始し、「開始モード」設定を「自動」に変更するのを忘れています。 - SSMS(
YOUR-PC\SQLEXPRESS
をキャッシュする)を介して接続できます MRUのポート)。私のPythonアプリも接続できます。 - 次回以降
YOUR-PC
再起動すると、SSMS(MRU経由)で接続できますが、Pythonアプリでは接続できません(SQLブラウザサービスがYOUR-PC
で実行されなくなったため) 。