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