2008-09-24 5 views
25

Es un tipo de pregunta de "gallina o huevo", pero ¿alguien puede idear una consulta que pueda devolver el nombre de la instancia actual de la base de datos en la que se ejecuta la consulta? Créame cuando digo que entiendo la paradoja: ¿por qué necesita saber el nombre de la instancia de la base de datos si ya está conectado para ejecutar la consulta? Auditoría en un entorno de múltiples bases de datos.¿Cómo puedo consultar el nombre de la instancia actual de la base de datos de SQL Server?

He visto todos los @@ globales en Libros en línea. "SELECT @@servername" se acerca, pero quiero el nombre de la instancia de la base de datos en lugar del servidor.

+0

-1 El autor le preguntó sobre el nombre de la instancia actual, pero aceptaron la respuesta sobre la base de datos actual ¡¿nombre?! –

+0

Ya no, [Gennady Vanin Novosibirsk] (http://stackoverflow.com/users/200449/gennady-vanin-novosibirsk). – flipdoubt

+0

luego +1. Gracias. Era confuso, es decir, conducía a un desperdicio de tiempo (por ejemplo, edité el título de la pregunta y luego lo revertí) –

Respuesta

1

Usted debe ser capaz de usar:

SELECT SERVERPROPERTY ('InstanceName') 
+25

SELECCIONAR SERVERPROPERTY ('InstanceName') me da un NULL – Steam

+5

Buen ejemplo de cuándo la respuesta aceptada no es la mejor respuesta – aMazing

+0

no solo "no es la mejor respuesta", sino simplemente una respuesta incorrecta. – denfromufa

40
SELECT DB_NAME() 

Devuelve el nombre de la base de datos.

+0

Esto no funciona para mí en SQL Developer. Devuelve 'ORA-00923: Palabra clave FROM no encontrada donde se esperaba 00923. 00000 -" Palabra clave FROM no encontrada donde se esperaba "* Causa: * Acción: Error en la línea: 1 Columna: 16'. ¿Algunas ideas? 'SELECT DATABASE();' también falla. – Xonatron

+7

@MatthewDoucette La pregunta y sus respuestas son específicas de SQL Server, no de Oracle, razón por la cual falla para usted. (Por ejemplo, Oracle no admite 'select' sin una tabla especificada, pero SQL Server sí lo hace.) –

+0

me da master y no server \ instance. – Steam

5
SELECT DB_NAME() AS DatabaseName 
6

Usted puede utilizar DB_NAME():

SELECT DB_NAME() 
5

No estoy seguro de lo que pedían exactamente. Mientras escribe este procedimiento para una necesidad de auditoría, supongo que se pregunta cómo se obtiene el nombre de la base de datos actual cuando el procedimiento almacenado existe en otra base de datos. p.ej.

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

Este es el comportamiento correcto, pero no siempre es lo que estás buscando. Para evitar esto, necesita crear el SP en la base de datos maestra y marcar el procedimiento como un procedimiento del sistema. El método de hacer esto difiere entre las versiones de SQL Server, pero este es el método para SQL Server 2005 (es posible hacerlo en 2000 con la función 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' */ 

Hope esto es lo que estabas buscando

16
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 
+0

Esto funcionó para mí y me permitió encontrar cuál buscaba más rápido. – MGOwen

+1

Añadir a eso: ', HOST_NAME() AS 'Nombre de host' –

2

simplemente usar:

select @@servicename 
Cuestiones relacionadas