LocalDb以外のSQLServerSELECT SERVERPROPERTY('ServerName')
の場合、サーバーの名前と実行しているインスタンスを取得できます。ただし、LocalDbサーバーの場合は、を取得しSERVERNAME\LOCALDB#SOMEHASH
ます。ローカルインスタンス名を取得するにはどうすればよいですか?
解決:
LocalDBと「通常の」SQLServerインスタンスの両方で機能するインスタンスを取得するためのソリューション:
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'))
元の質問で言及すべきいくつかの背景:アプリケーションの構成データベースがあります。特に、接続文字列を格納します。開発者のマシンと統合テストでは、スクリプトを使用してデータベースを生成し、接続文字列でローカルインスタンスを参照できるようにする必要があります。したがって、接続文字列が機能している必要があります(そうでLOCALDB#SOMEHASH
はありません)。データベースサーバーのエディションには多少の広がりがあるので、両方のケースを処理できるものが必要でした。