2009-03-24 14 views
203

टीएसक्यूएल का उपयोग कर SQL सर्वर पर डेटाबेस मौजूद है या नहीं, यह जांचने का आदर्श तरीका क्या है? यह लागू करने के लिए कई दृष्टिकोण लगता है।SQL सर्वर में कोई डेटाबेस मौजूद है या नहीं, यह जांचने के लिए कैसे करें?

उत्तर

116

एक माइक्रोसॉफ्ट के स्क्रिप्ट से:

DECLARE @dbname nvarchar(128) 
SET @dbname = N'Senna' 

IF (EXISTS (SELECT name 
FROM master.dbo.sysdatabases 
WHERE ('[' + name + ']' = @dbname 
OR name = @dbname))) 

-- code mine :) 
PRINT 'db exists' 
+5

किसी Microsoft स्क्रिप्ट से हो सकता है कि लेकिन यह माइक्रोसॉफ्ट अभ्यास की सिफारिश नहीं है। वे सीधे सिस्टम टेबल तक पहुंचने के बजाय INFORMATION_SCHEMA दृश्यों का उपयोग करके प्रोत्साहित करते हैं। – mwigdahl

+0

"मौजूद नहीं है" बस नहीं होना चाहिए "मौजूद है" –

+4

क्यों सीधे INFORMATION_SCHEMA का उपयोग कर के बजाय तालिकाओं के लिए संदर्भों का उपयोग को प्रोत्साहित है? – eKek0

31
IF EXISTS (SELECT name FROM master.sys.databases WHERE name = N'YourDatabaseName') 
    Do your thing... 

वैसे, इस एसक्यूएल सर्वर स्टूडियो से सीधे आया था, ताकि आपको इस उपकरण का उपयोग किया है, मैं सुझाव है कि आप विभिन्न "स्क्रिप्ट के साथ खेल शुरू xxxx एएस "उपलब्ध हैं जो कार्य उपलब्ध हैं। आपके जीवन को आसान बना देगा! :)

+2

यदि 'उपयोग [मास्टर]' असुविधाजनक है, तो आप सीधे किसी भी डेटाबेस से 'master.sys.databases' के रूप में दृश्य दृश्य को संबोधित कर सकते हैं – ProfK

416

वास्तव में यह सबसे अच्छा उपयोग करने के लिए है:

if db_id('dms') is not null 
    --code mine :) 
    print 'db exists' 

देखें https://docs.microsoft.com/en-us/sql/t-sql/functions/db-id-transact-sql

+2

वैसे यह निश्चित रूप से छोटा और अधिक गुप्त है। जिज्ञासा से, यह बेहतर क्यों है? –

+6

संभवतः क्योंकि डीबी_आईडी '[मास्टर] ' – Anthony

+4

में किसी विशिष्ट स्थान पर डेटाबेस नाम की जांच करने से सुरक्षित है, हां, हां, साथ ही यह db_id() के लिए लगभग असंभव है (समान जटिलता/लागत हो सकती है) एक संख्या के लिए db_id क्वेरी के बाद स्वीकार्य उत्तर। इसलिए मैं db_id() को एक बेहतर तरीके से लागू किया जा रहा हूं, क्योंकि यह डेटाबेस डेवलपर्स द्वारा किया गया था। – Eduardo

3

मुझे पसंद है @ एडुआर्डो के जवाब और मैं स्वीकार किए जाते हैं जवाब पसंद आया। मुझे इस तरह से कुछ से बूलियन वापस जाना पसंद है, इसलिए मैंने इसे आपके लिए लिखा है।

CREATE FUNCTION dbo.DatabaseExists(@dbname nvarchar(128)) 
RETURNS bit 
AS 
BEGIN 
    declare @result bit = 0 
    SELECT @result = CAST(
     CASE WHEN db_id(@dbname) is not null THEN 1 
     ELSE 0 
     END 
    AS BIT) 
    return @result 
END 
GO 

अब आप इसे इस तरह उपयोग कर सकते हैं:

select [dbo].[DatabaseExists]('master') --returns 1 
select [dbo].[DatabaseExists]('slave') --returns 0 
संबंधित मुद्दे

 संबंधित मुद्दे