Sql server 如何查询当前SQL Server数据库实例的名称?

Sql server 如何查询当前SQL Server数据库实例的名称?,sql-server,tsql,Sql Server,Tsql,这有点像是“鸡或蛋”式的查询,但是有人能想出一个查询来返回执行查询的当前数据库实例的名称吗?请相信我,我理解这个悖论:如果已经连接到数据库实例来执行查询,那么为什么需要知道数据库实例的名称?多数据库环境中的审核 我已经看过了所有在线书籍中的@globals。“SELECT@@servername”很接近,但我想要的是数据库实例的名称,而不是服务器的名称 SELECT DB_NAME() 返回数据库名称。您应该能够使用: SELECT DB_NAME() AS DatabaseName SEL

这有点像是“鸡或蛋”式的查询,但是有人能想出一个查询来返回执行查询的当前数据库实例的名称吗?请相信我,我理解这个悖论:如果已经连接到数据库实例来执行查询,那么为什么需要知道数据库实例的名称?多数据库环境中的审核

我已经看过了所有在线书籍中的@globals。“
SELECT@@servername
”很接近,但我想要的是数据库实例的名称,而不是服务器的名称

SELECT DB_NAME()

返回数据库名称。

您应该能够使用:

SELECT DB_NAME() AS DatabaseName
SELECT SERVERPROPERTY ('InstanceName') 

您可以使用DB\u NAME()

SELECT DB_NAME()

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

USE DATABASE1
GO
CREATE PROC spGetContext AS
SELECT DB_NAME()
GO
USE DATABASE2
GO
EXEC DATABASE1..spGetContext
/* RETURNS 'DATABASE1' not 'DATABASE2' */
这是正确的行为,但并不总是你想要的。要解决这个问题,您需要在主数据库中创建SP,并将该过程标记为系统过程。执行此操作的方法在SQL Server版本之间有所不同,但以下是SQL Server 2005的方法(可以在2000年使用
master.dbo.sp_MS_upd_sysobj_category
函数)


希望这就是你想要的

只需使用:

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
select @@servicename

SELECT SERVERPROPERTY('InstanceName')给我一个空值。还有其他属性,所以您也可以尝试
SELECT SERVERPROPERTY('ServerName')、SERVERPROPERTY('MachineName')
等等。请参阅以获取一些现有属性的列表。已标记为版主。。。2019年的答案不起作用。。。正确答案是SELECT DB_NAME(),它有46个点(第46个是我的)。给我的是master而不是server\instance。更相关的是:
选择HOST_NAME()
添加到这一点:
,HOST_NAME()作为“HOST NAME”
select @@servicename