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

标签 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'))

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

最佳答案

这是:

SELECT SERVERPROPERTY ('InstanceName')

编辑

来自 link

连接到 LocalDB 的共享实例

要连接到 LocalDB 的共享实例,请在连接字符串中添加 .\(点 + 反斜杠)以引用为共享实例保留的命名空间。例如,要连接到名为 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"); 的连接字符串建立与 LocalDB 实例的连接。

关于sql - 如何在SQL脚本中确定LocalDb实例名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15140370/

相关文章:

mysql - 删除旧记录 - MySQL

c# - 如何使用 Windows Phone 8 连接到已托管在服务器上的 SQL Server 数据库

sql-server - MS SQL 2008 - 获取数据库中的所有表名称及其行数

c# - 超时/结束日期事件的解决方案

sql-server - 具有 SQL Server 后端的 MS Access 应用程序的安全模型(部署)

sql - 如何反转 Postgres 中 SETOF 的顺序?

sql - 使用数据透视但不聚合将垂直数据转换为水平数据?

sql - PL/SQL 触发器 : can't create apex user

wpf - 我们如何使用 Mycrosoft Sync Framework 2.0 推迟 SQL Express DB 作为客户端和 SQL Server 作为服务器的冲突解决

c# - Entity Framework 4.1 没有向 SQL Server Express 数据库添加任何行