car*_*ett 7 sql sql-server sql-server-express localdb
对于非LocalDb SQL Server,我可以SELECT SERVERPROPERTY('ServerName')获取服务器的名称和我正在运行的实例.但是,对于LocalDb服务器,我得到了SERVERNAME\LOCALDB#SOMEHASH.如何获取本地实例名称?
解:
获取实例的解决方案,在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'))
Run Code Online (Sandbox Code Playgroud)
我应该在原始问题中提到的一些背景:我们的应用程序有一个配置数据库.除此之外,它还存储连接字符串.对于开发人员计算机和集成测试,我们希望能够使用脚本生成数据库,并使连接字符串引用本地实例.因此,我需要一个工作连接字符串(LOCALDB#SOMEHASH不是).由于数据库服务器版本存在一些差异,我需要能够处理这两种情况的东西.
这是:
SELECT SERVERPROPERTY ('InstanceName')
Run Code Online (Sandbox Code Playgroud)
编辑
来自链接
连接到 LocalDB 的共享实例
要连接到 LocalDB 的共享实例,请在连接字符串中添加 .\(点 + 反斜杠)以引用为共享实例保留的命名空间。例如,要连接到名为 AppData 的 LocalDB 共享实例,请使用 (localdb).\AppData 等连接字符串作为连接字符串的一部分。连接到不属于自己的 LocalDB 共享实例的用户必须具有 Windows 身份验证或 SQL Server 身份验证登录名。
和
如果您的应用程序使用 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");