2008-09-24 17 views
25

यह एक "चिकन या अंडा" प्रकार का प्रश्न है, लेकिन क्या कोई ऐसा प्रश्न सपना देख सकता है जो वर्तमान डेटाबेस इंस्टेंस का नाम वापस कर सकता है जिसमें क्वेरी निष्पादित होती है? मेरा मानना ​​है कि जब मैं कहता हूं कि मैं विरोधाभास को समझता हूं: यदि आप पहले से ही क्वेरी निष्पादित करने के लिए जुड़े हुए हैं तो आपको डेटाबेस इंस्टेंस के नाम को जानने की आवश्यकता क्यों है? एक बहु डेटाबेस वातावरण में लेखा परीक्षा।मैं वर्तमान SQL सर्वर डेटाबेस उदाहरण के नाम से कैसे क्वेरी कर सकता हूं?

मैंने पुस्तकें ऑनलाइन में सभी @@ ग्लोबल्स को देखा है। "SELECT @@servername" करीब आता है, लेकिन मुझे सर्वर की बजाय डेटाबेस उदाहरण का नाम चाहिए।

+0

-1 लेखक वर्तमान उदाहरण के नाम के बारे में पूछा लेकिन मौजूदा डेटाबेस के बारे में जवाब स्वीकार किए जाते हैं नाम ?! –

+0

अब और नहीं, [जेनेडी वानिन नोवोसिबिर्स्क] (http://stackoverflow.com/users/200449/gennady-vanin-novosibirsk)। – flipdoubt

+0

फिर +1। धन्यवाद। यह भ्रमित था, यानी एक समय बर्बाद कर रहा था (उदाहरण के लिए, मैंने प्रश्न के शीर्षक को संपादित किया और फिर इसे वापस कर दिया) –

उत्तर

1

आप उपयोग करने के लिए सक्षम होना चाहिए:

SELECT SERVERPROPERTY ('InstanceName') 
+25

चयन करें SERVERPROPERTY (' InstanceName ') मुझे एक पूर्ण – Steam

+5

देता है जब स्वीकार्य उत्तर सबसे अच्छा जवाब नहीं है – aMazing

+0

न केवल" सर्वश्रेष्ठ जवाब नहीं ", बल्कि गलत जवाब! – denfromufa

40
SELECT DB_NAME() 

डेटाबेस नाम देता है।

+0

यह SQL डेवलपर में मेरे लिए काम नहीं करता है। यह 'ORA-00923 लौटाता है: कीवर्ड से नहीं मिला जहां 00923 की उम्मीद है। 00000 -" कीवर्ड से अपेक्षित नहीं मिला "* कारण: * क्रिया: रेखा में त्रुटि: 1 कॉलम: 16'। कोई विचार? 'चयन डेटा();' भी विफल रहता है। – Xonatron

+7

@MatthewDoucette प्रश्न और उसके उत्तर SQL सर्वर के लिए विशिष्ट नहीं हैं ओरेकल नहीं, यही कारण है कि यह आपके लिए विफल रहता है। (उदाहरण के लिए, ओरेकल निर्दिष्ट तालिका के बिना 'चयन' का समर्थन नहीं करता है लेकिन SQL सर्वर करता है।) –

+0

मुझे मास्टर देता है और सर्वर \ उदाहरण नहीं देता है। – Steam

6

आप) DB_NAME (उपयोग कर सकते हैं:

SELECT DB_NAME() 
5

मुझे यकीन है कि क्या आप वास्तव में पूछ रहे थे नहीं कर रहा हूँ। जैसा कि आप ऑडिटिंग की आवश्यकता के लिए इस प्रक्रिया को लिख रहे हैं, मुझे लगता है कि आप पूछ रहे हैं कि संग्रहीत प्रक्रिया किसी अन्य डेटाबेस में मौजूद होने पर आप वर्तमान डेटाबेस नाम कैसे प्राप्त करते हैं। जैसे

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

यह सही व्यवहार है, लेकिन हमेशा आप जो खोज रहे हैं वह हमेशा नहीं। इसे पाने के लिए आपको मास्टर डेटाबेस में एसपी बनाने और सिस्टम प्रक्रिया के रूप में प्रक्रिया को चिह्नित करने की आवश्यकता है। ऐसा करने का तरीका SQL सर्वर संस्करणों के बीच भिन्न है लेकिन SQL सर्वर 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' */ 

इस आशा आप

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

यह मेरे लिए काम करता है, और मुझे यह पता चलता है कि मैं कौन सा था, सबसे तेज़। – MGOwen

+1

उसमें जोड़ें: ', HOST_NAME() AS 'होस्ट नाम'' –

2

क्या देख रहे थे बस का उपयोग करें:

select @@servicename 
संबंधित मुद्दे