对于非LocalDb SQL Server,我可以SELECT SERVERPROPERTY('ServerName')
获取服务器的名称和我正在运行的实例。但是,对于LocalDb服务器,我得到SERVERNAME\LOCALDB#SOMEHASH
。如何获取本地实例名称?
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 :(得分:3)
这是:
SELECT SERVERPROPERTY ('InstanceName')
修改强>
来自link
连接到LocalDB的共享实例
要连接到LocalDB的共享实例,请将。\(dot + backslash)添加到连接字符串,以引用为共享实例保留的命名空间。例如,要连接到名为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");