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

时间:2020-03-06 14:41:18  来源:igfitidea点击:

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

我已经看过联机丛书中的所有@@ globals。 "SELECT @@ servername"接近,但是我想要数据库实例而不是服务器的名称。

解决方案

SELECT DB_NAME()

返回数据库名称。

SELECT DB_NAME() AS DatabaseName

我们应该可以使用:

SELECT SERVERPROPERTY ('InstanceName')

我们可以使用DB_NAME():

SELECT DB_NAME()

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

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' */

希望这就是你想要的