2008-09-24 7 views
25

Es ist ein bisschen eine "Huhn oder Ei" Art der Abfrage, aber kann jemand eine Abfrage träumen, die den Namen der aktuellen Datenbankinstanz zurückgeben kann, in der die Abfrage ausgeführt wird? Glauben Sie mir, wenn ich sage, dass ich das Paradoxon verstehe: Warum müssen Sie den Namen der Datenbankinstanz wissen, wenn Sie bereits verbunden sind, um die Abfrage auszuführen? Auditing in einer Umgebung mit mehreren DatenbankenWie kann ich den Namen der aktuellen SQL Server-Datenbankinstanz abfragen?

Ich habe alle @@ Globals in der Online-Dokumentation betrachtet. "SELECT @@servername" kommt zu nahe, aber ich möchte den Namen der Datenbankinstanz und nicht den Server.

+0

-1 Der Autor fragt nach der aktuellen Instanz Namen, aber akzeptiert die Antwort über die aktuelle Datenbank Name?! –

+0

Nicht mehr, [Gennady Vanin Nowosibirsk] (http://stackoverflow.com/users/200449/gennady-vanin-novosibirsk). – flipdoubt

+0

dann +1. Vielen Dank. Es war verwirrend, d. H. Es führte zu einer Zeitverschwendung (zum Beispiel editierte ich den Titel der Frage und stellte ihn wieder her) –

Antwort

1

sollten Sie in der Lage sein zu verwenden:

SELECT SERVERPROPERTY ('InstanceName') 
+25

SELECT SERVERPROPERTY ('InstanceName') gibt mir eine Null – Steam

+5

Gutes Beispiel, wenn Akzeptierte Antwort nicht die beste Antwort ist – aMazing

+0

nicht nur "nicht die beste Antwort", sondern einfach falsche Antwort! – denfromufa

40
SELECT DB_NAME() 

Gibt den Datenbanknamen zurück.

+0

Das funktioniert nicht für mich in SQL Developer. Es gibt 'ORA-00923: FROM Schlüsselwort nicht gefunden, wo erwartet 00923. 00000 -" FROM Schlüsselwort nicht gefunden, wo erwartet "* Ursache: * Aktion: Fehler bei Zeile: 1 Spalte: 16'. Irgendwelche Ideen? 'SELECT DATABASE();' schlägt ebenfalls fehl. – Xonatron

+7

@MatthewDoucette Die Frage und ihre Antworten sind spezifisch für SQL Server und nicht für Oracle, weshalb es für Sie fehlschlägt. (Oracle unterstützt beispielsweise 'select' nicht, wenn eine Tabelle angegeben ist, aber SQL Server tut dies.) –

+0

gibt mir Master und nicht Server \ instance. – Steam

5
SELECT DB_NAME() AS DatabaseName 
6

Sie DB_NAME verwenden können():

SELECT DB_NAME() 
5

Ich bin nicht sicher, was Sie genau fragen. Während Sie diese Prozedur für eine Auditing-Anforderung schreiben, werden Sie gefragt, wie Sie den aktuellen Datenbanknamen erhalten, wenn die gespeicherte Prozedur in einer anderen Datenbank vorhanden ist. z.B.

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

Dies ist das richtige Verhalten, aber nicht immer das, wonach Sie suchen. Um dies zu umgehen, müssen Sie den SP in der Master-Datenbank anlegen und die Prozedur als Systemprozedur markieren. Die Methode dafür unterscheidet zwischen SQL Server-Versionen, aber hier ist die Methode für SQL Server 2005 (es ist möglich, in 2000 mit der master.dbo.sp_MS_upd_sysobj_category-Funktion zu tun).

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' */ 

Hoffnung das ist, was Sie suchen

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

Das funktionierte für mich und ließ mich am schnellsten herausfinden, nach welchem ​​ich suchte. – MGOwen

+1

Fügen Sie hinzu: ', HOST_NAME() AS 'Host Name'' –

2

einfach verwenden:

select @@servicename