如何在 SQL 脚本中确定 LocalDb 实例名称?

Posted

技术标签:

【中文标题】如何在 SQL 脚本中确定 LocalDb 实例名称?【英文标题】:How to determine LocalDb instance name in SQL script? 【发布时间】:2013-02-28 16:16:42 【问题描述】:

对于非 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'))

我应该在原始问题中提到的一些背景知识:我们有一个应用程序的配置数据库。除其他外,它存储连接字符串。对于开发人员机器和集成测试,我们希望能够使用脚本生成数据库,并让连接字符串引用本地实例。因此,我需要一个有效的连接字符串(LOCALDB#SOMEHASH 不是)。由于数据库服务器的版本有一些分布,我需要可以处理这两种情况的东西。

【问题讨论】:

为什么 SERVERNAME\LOCALDB#SOMEHASH 不可接受? @RaySaltrelli:因为它不能用于从我的测试中的代码连接到 localdb 选择@@Servername 不是你需要的? @granadaCoder: 同SERVERPROPERTY('ServerName') 对不起。我想我搞砸了。您可以运行 Select @@VERSION 并发布吗? 【参考方案1】:

这是:

SELECT SERVERPROPERTY ('InstanceName')

编辑

来自link

连接到 LocalDB 的共享实例

要连接到 LocalDB 的共享实例,请将 .\(点 + 反斜杠)添加到连接字符串以引用为共享实例保留的命名空间。例如,要连接到名为 AppData 的 LocalDB 共享实例,请使用 (localdb).\AppData 等连接字符串作为连接字符串的一部分。连接到他们不拥有的 LocalDB 共享实例的用户必须具有 Windows 身份验证或 SQL Server 身份验证登录。

如果您的应用程序使用 4.0.2 之前的 .NET 版本,您必须直接连接到 LocalDB 的命名管道。 Instance pipe name value 是 LocalDB 实例正在侦听的命名管道。每次启动 LocalDB 实例时,LOCALDB# 之后的实例管道名称部分都会更改。要使用 SQL Server Management Studio 连接到 LocalDB 实例,请在连接到数据库引擎对话框的服务器名称框中键入实例管道名称。从您的自定义程序中,您可以使用类似于 SqlConnection conn = new SqlConnection(@"Server=np:\\.\pipe\LOCALDB#F365A78E\tsql\query"); 的连接字符串与 LocalDB 实例建立连接

【讨论】:

不幸的是,这将返回 LOCALDB#SOMEHASH 部分。 你熟悉this 是的,这就是我的问题。至少在我的快速测试中,我无法连接到(localdb)\LOCALDB#SOMEHASH。我应该期望能够做到吗? @carlpett 还有一次) 太棒了!不知道能够在连接字符串中使用命名管道。用解决方案更新问题

以上是关于如何在 SQL 脚本中确定 LocalDb 实例名称?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 LocalDB 实例切换到 SQL Express?

Flyway 可以使用 Sql Express LocalDB

LocalDB介绍

LocalDB SQL Server 2014 Express 创建 2 个实例 (localdb)\ProjectsV12 & (localdb)\MSSQLLocalDB?

LocalDB SQL Server 2014 Express 创建 2 个实例 (localdb)\ProjectsV12 & (localdb)\MSSQLLocalDB?

无法从 SQL Management Studio 中的 LocalDB 生成脚本