8

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はありません)。データベースサーバーのエディションには多少の広がりがあるので、両方のケースを処理できるものが必要でした。

4

1 に答える 1

4

これは:

SELECT SERVERPROPERTY ('InstanceName')

編集

リンクから

LocalDBの共有インスタンスへの接続

LocalDBの共有インスタンスに接続するには、接続文字列に。\(ドット+バックスラッシュ)を追加して、共有インスタンス用に予約されている名前空間を参照します。たとえば、AppDataという名前のLocalDBの共有インスタンスに接続するには、接続文字列の一部として(localdb)。\AppDataなどの接続文字列を使用します。所有していないLocalDBの共有インスタンスに接続するユーザーは、Windows認証またはSQLServer認証のログインが必要です。

アプリケーションで4.0.2より前のバージョンの.NETを使用している場合は、LocalDBの名前付きパイプに直接接続する必要があります。インスタンスパイプ名の値は、LocalDBのインスタンスがリッスンしている名前付きパイプです。LOCALDB#の後のインスタンスパイプ名の部分は、LocalDBのインスタンスが開始されるたびに変更されます。SQL Server Management Studioを使用してLocalDBのインスタンスに接続するには、[データベースエンジンへの接続]ダイアログボックスの[サーバー名]ボックスにインスタンスパイプ名を入力します。カスタムプログラムから、次のような接続文字列を使用してLocalDBのインスタンスへの接続を確立できます。SqlConnection conn = new SqlConnection(@"Server=np:\\.\pipe\LOCALDB#F365A78E\tsql\query");

于 2013-02-28T16:21:53.430 に答える