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

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

Я просмотрел все глобальные переменные @@ в электронной книге. «SELECT @@servername» подходит близко, но мне нужно имя экземпляра базы данных, а не сервера.

msdn.microsoft.com/en-us/library/ms189753.aspx
ROMANIA_engineer 22.12.2015 11:45
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
33
1
66 168
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

SELECT DB_NAME()

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

дает мне мастер, а не сервер \ экземпляр.

Steam 03.03.2014 06:52

Более актуально: SELECT HOST_NAME()

Jeppe Stig Nielsen 28.09.2016 16:17

SELECT DB_NAME() AS DatabaseName

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

SELECT SERVERPROPERTY ('InstanceName') 

SELECT SERVERPROPERTY ('InstanceName') дает мне NULL

Steam 03.03.2014 06:51

Есть и другие свойства, так что вы также можете попробовать SELECT SERVERPROPERTY('ServerName'), SERVERPROPERTY('MachineName') и так далее. См. Документация MSDN SERVERPROPERTY для списка немного существующих свойств.

Jeppe Stig Nielsen 15.09.2016 12:28

Помечено для модераторов ... не работает как ответ в 2019 году ... Правильный ответ - SELECT DB_NAME (), у которого 46 баллов (46-е - мое).

J. Chris Compton 04.03.2019 19:09

Вы можете использовать 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' */

Это правильное поведение, но не всегда то, что вы ищете. Чтобы обойти это, вам необходимо создать 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
 @@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 'Host Name'

Jeppe Stig Nielsen 28.09.2016 16:23

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

select @@servicename

Другие вопросы по теме