【问题标题】:How can I query the name of the current SQL Server database instance?如何查询当前 SQL Server 数据库实例的名称?
【发布时间】:2010-09-12 21:24:59
【问题描述】:

这有点像“鸡或蛋”类型的查询,但有人能想出一个可以返回执行查询的当前数据库实例名称的查询吗?当我说我理解这个悖论时请相信我:如果您已经连接到执行查询,为什么还需要知道数据库实例的名称?在多数据库环境中进行审计。

我查看了联机丛书中的所有 @@ 全局变量。 “SELECT @@servername”很接近,但我想要数据库实例的名称而不是服务器的名称。

【问题讨论】:

标签: sql-server tsql


【解决方案1】:
SELECT DB_NAME()

返回数据库名称。

【讨论】:

  • 给我master而不是server\instance。
  • 更多相关:SELECT HOST_NAME()
【解决方案2】:
SELECT
 @@servername AS 'Server Name' -- The database server's machine name
,@@servicename AS 'Instance Name' -- e.g.: MSSQLSERVER
,DB_NAME() AS 'Database Name'
,HOST_NAME() AS 'Host Name' -- The database client's machine name

【讨论】:

  • 添加:,HOST_NAME() AS 'Host Name'
【解决方案3】:

我不确定你到底在问什么。当您为审核需要编写此过程时,我猜您是在问当存储过程存在于另一个数据库中时如何获取当前数据库名称。例如

USE DATABASE1
GO
CREATE PROC spGetContext AS
SELECT DB_NAME()
GO
USE DATABASE2
GO
EXEC DATABASE1..spGetContext
/* RETURNS 'DATABASE1' not 'DATABASE2' */

这是正确的行为,但并不总是您想要的。为了解决这个问题,您需要在 Master 数据库中创建 SP 并将该过程标记为系统过程。执行此操作的方法因 SQL Server 版本而异,但这里是 SQL Server 2005 的方法(可以在 2000 年使用 master.dbo.sp_MS_upd_sysobj_category 函数执行此操作)。

USE MASTER
/* You must begin function name with sp_ */
CREATE FUNCTION sp_GetContext
AS
SELECT DB_NAME()
GO
EXEC sys.sp_MS_marksystemobject sp_GetContext

USE DATABASE2
/* Note - no need to reference master when calling SP */
EXEC sp_GetContext
/* RETURNS 'DATABASE2' */

希望这就是你要找的东西

【讨论】:

    【解决方案4】:

    您可以使用 DB_NAME()

    SELECT DB_NAME()
    

    【讨论】:

      【解决方案5】:
      SELECT DB_NAME() AS DatabaseName
      

      【讨论】:

        【解决方案6】:

        只需使用:

        select @@servicename
        

        【讨论】:

        • 问题中已经提到了这个解决方案,但没有给出预期的结果
        【解决方案7】:

        你应该可以使用:

        SELECT SERVERPROPERTY ('InstanceName') 
        

        【讨论】:

        • SELECT SERVERPROPERTY ('InstanceName') 给我一个 NULL
        • 还有其他属性,也可以试试SELECT SERVERPROPERTY('ServerName'), SERVERPROPERTY('MachineName')等。请参阅MSDN documentation SERVERPROPERTY 以获取一些 存在的属性的列表。
        • 为版主标记...在 2019 年无法作为答案...正确答案是 SELECT DB_NAME(),它有 46 分(第 46 分是我的)。
        猜你喜欢
        • 1970-01-01
        • 2022-10-23
        • 2013-08-06
        • 1970-01-01
        • 1970-01-01
        • 2017-06-12
        • 1970-01-01
        • 2016-03-25
        相关资源
        最近更新 更多