[英]“This database file is not compatible with the current instance of 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.