Как я могу запросить имя текущего экземпляра базы данных SQL Server?

Это немного похоже на запрос "курица или яйцо", но может ли кто-то придумать запрос, который может вернуть имя текущего экземпляра базы данных, в котором выполняется запрос? Поверьте мне, когда я говорю, я понимаю парадокс: зачем вам нужно знать имя экземпляра базы данных, если вы уже подключены для выполнения запроса? Аудит в среде с несколькими базами данных.

Я просмотрел все @@globals в Books Online. "SELECT @@servername" близок, но мне нужно имя экземпляра базы данных, а не сервер.

Ответ 1

Вы должны иметь возможность использовать:

SELECT SERVERPROPERTY ('InstanceName') 

Ответ 2

SELECT DB_NAME()

Возвращает имя базы данных.

Ответ 3

SELECT
 @@servername AS 'Server Name' -- The database server machine name
,@@servicename AS 'Instance Name' -- e.g.: MSSQLSERVER
,DB_NAME() AS 'Database Name'
,HOST_NAME() AS 'Host Name' -- The database client machine name

Ответ 4

Вы можете использовать DB_NAME():

SELECT DB_NAME()

Ответ 5

SELECT DB_NAME() AS DatabaseName

Ответ 6

Я не уверен, что вы точно спрашивали. Когда вы пишете эту процедуру для аудита, я думаю, вы спрашиваете, как получить текущее имя базы данных, когда Хранимая процедура существует в другой базе данных. например.

USE DATABASE1
GO
CREATE PROC spGetContext AS
SELECT DB_NAME()
GO
USE DATABASE2
GO
EXEC DATABASE1..spGetContext
/* RETURNS 'DATABASE1' not 'DATABASE2' */

Это правильное поведение, но не всегда то, что вы ищете. Чтобы обойти это, вам нужно создать SP в базе данных Master и пометить процедуру как Системную процедуру. Способ выполнения этого отличается от версий 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' */

Надеюсь, это то, что вы искали

Ответ 7

просто используйте:

select @@servicename