当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何查询当前SQLServer数据库实例的名称?》经验,为你挑选了5个好方法。

它有点像"鸡或鸡蛋"类型的查询,但有人可以梦想一个可以返回查询执行的当前数据库实例的名称的查询吗?相信我,当我说我明白悖论:如果你已经连接执行查询,为什么你需要知道数据库实例的名称?在多数据库环境中进行审计.

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



1> Dana..:
SELECT DB_NAME()

返回数据库名称.


@MatthewDoucette问题及其答案是特定于SQL Server而不是Oracle,这就是为什么它失败的原因.(例如,Oracle不支持没有指定表但是SQL Server的`select`.)

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'主机名'

3> Giacomo Degl..:

您可以使用DB_NAME():

SELECT DB_NAME()



4> 小智..:
SELECT DB_NAME() AS DatabaseName



5> Ollie..:

我不确定你究竟在问什么.当您为审核需求编写此过程时,我猜您在询问当另一个数据库中存储过程存在时如何获取当前数据库名称.例如

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

希望这是你想要的

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有