繁体   English   中英

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

[英]How to query the name of the current SQL Server database instance?

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

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

SELECT DB_NAME()

返回数据库名称。

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

您可以使用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' */

希望这是你要找的

SELECT DB_NAME() AS DatabaseName

只需使用:

select @@servicename

您应该能够使用:

SELECT SERVERPROPERTY ('InstanceName') 

您可以获取当前数据库的实例名称,如下所示:

SELECT @@SERVICENAME                   -- SQLEXPRESS
SELECT SERVERPROPERTY ('InstanceName') -- SQLEXPRESS

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM