Ответ 1
Вы должны иметь возможность использовать:
SELECT SERVERPROPERTY ('InstanceName')
Это немного похоже на запрос "курица или яйцо", но может ли кто-то придумать запрос, который может вернуть имя текущего экземпляра базы данных, в котором выполняется запрос? Поверьте мне, когда я говорю, я понимаю парадокс: зачем вам нужно знать имя экземпляра базы данных, если вы уже подключены для выполнения запроса? Аудит в среде с несколькими базами данных.
Я просмотрел все @@globals в Books Online. "SELECT @@servername
" близок, но мне нужно имя экземпляра базы данных, а не сервер.
Вы должны иметь возможность использовать:
SELECT SERVERPROPERTY ('InstanceName')
SELECT DB_NAME()
Возвращает имя базы данных.
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
Вы можете использовать DB_NAME():
SELECT DB_NAME()
SELECT DB_NAME() AS DatabaseName
Я не уверен, что вы точно спрашивали. Когда вы пишете эту процедуру для аудита, я думаю, вы спрашиваете, как получить текущее имя базы данных, когда Хранимая процедура существует в другой базе данных. например.
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' */
Надеюсь, это то, что вы искали
просто используйте:
select @@servicename