2013-02-28 12 views
6

非LocalDb SQL Serverの場合は、SELECT SERVERPROPERTY('ServerName')を使用して、実行しているサーバーとインスタンスの名前を取得できます。ただし、LocalDbサーバーの場合はSERVERNAME\LOCALDB#SOMEHASHとなります。どのようにローカルインスタンス名を取得できますか?SQLスクリプトでLocalDbインスタンス名を判別する方法は?

SOLUTION:

インスタンスを取得するためのソリューション、LocalDBと "通常" のSQL Serverインスタンスの両方に取り組んで:私は元の質問に言及している必要があります

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

+0

なぜSERVERNAME \ LOCALDB#SOMEHASHは受け入れられないのですか? –

+0

@RaySaltrelli:テストのコードからlocaldbに接続するために使用することができないので、 – carlpett

+0

を選択してください@@ Servernameは必要なものではありませんか? – granadaCoder

答えて

3

はこれです:追加LocalDBの共有インスタンスに接続するにはLocalDB

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

から

SELECT SERVERPROPERTY ('InstanceName') 

EDIT

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

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

+0

残念ながら 'LOCALDB#SOMEHASH'部分を返します。 – carlpett

+0

あなたは[this](http://msdn.microsoft.com/en-us/library/hh510202.aspx)に慣れています – shibormot

+0

はい、したがって私の質問です。私のクイックテストでは少なくとも、 '(localdb)\ LOCALDB#SOMEHASH'に接続できませんでした。私はできることを期待する必要がありますか? – carlpett

関連する問題