2013-02-28 89 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

的連接字符串建立與LocalDB實例的連接爲什麼SERVERNAME \ LOCALDB#SOMEHASH不可接受? – 2013-02-28 16:20:56

+0

@RaySaltrelli:因爲它不能用於從我的測試中的代碼連接到localdb – carlpett 2013-02-28 16:23:05

+0

選擇@@ Servername是不是你所需要的? – granadaCoder 2013-02-28 16:34:36

回答

3

是這樣的:

SELECT SERVERPROPERTY ('InstanceName') 

EDIT

link

連接到的LocalDB

的共享實例

要連接到的LocalDB的添加共享實例

\(點+反斜槓)連接到連接字符串以引用爲共享實例保留的名稱空間。例如,要連接到名爲AppData的LocalDB的共享實例,請使用連接字符串(如(localdb)。\ AppData)作爲連接字符串的一部分。連接到他們不擁有的LocalDB共享實例的用戶必須具有Windows身份驗證或SQL Server身份驗證登錄名。

如果應用程序使用4.0.2之前版本的.NET,你必須直接連接到的LocalDB的命名管道。實例管道名稱值是LocalDB實例正在偵聽的命名管道。每次啓動LocalDB實例時,LOCALDB#後的Instance管道名稱部分都會更改。要通過使用SQL Server Management Studio連接到LocalDB的實例,請在「連接到數據庫引擎」對話框的「服務器名稱」框中鍵入實例管道名稱。從您的自定義程序中,您可以使用類似於SqlConnection conn = new SqlConnection(@"Server=np:\\.\pipe\LOCALDB#F365A78E\tsql\query");

+0

不幸的是,返回'LOCALDB#SOMEHASH'部分。 – carlpett 2013-02-28 16:23:39

+0

你是否熟悉[this](http://msdn.microsoft.com/en-us/library/hh510202.aspx) – shibormot 2013-02-28 16:32:09

+0

是的,也就是我的問題。至少在我的快速測試中,我無法連接到'(localdb)\ LOCALDB#SOMEHASH'。我應該期望能夠嗎? – carlpett 2013-02-28 16:34:34