「でもなぜ...?」
理由に興味のある方へ 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で実行されなくなったため) 。