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