SQL सर्वर में डेटाबेस मौजूद है या नहीं, इसकी जांच कैसे करें?


271

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

जवाबों:


165

Microsoft की स्क्रिप्ट से:

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'

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

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

4
सामान्य तौर पर ऐसा इसलिए होता है क्योंकि Microsoft INFORMATION_SCHEMA प्रारूप में आता है, और सिस्टम टेबलों को बदलने का अधिकार सुरक्षित रखता है। लेकिन इस मामले में, अधिक बारीकी से देखने के बाद, INFORMATION_SCHEMA काम नहीं करता है, इसलिए यह संभवतः सबसे अच्छा विकल्प है।
mwigdahl

3
मैं मानता हूँ कि INFORMATION_SCHEMA एक डेटाबेस के अंदर वस्तुओं की जाँच के लिए पसंद किया जाता है। लेकिन db के लिए जाँच करने के लिए INFORMATION_SCHEMA का उपयोग किया जा सकता है? <<<<< ............... CHECK_CONSTRAINTS चेक करें बाधाएं COLUMN_DOMAIN_USAGE प्रत्येक स्तंभ जिसमें उपयोगकर्ता द्वारा परिभाषित डेटा प्रकार है। COLUMN_PRIVILEGES वर्तमान डेटाबेस में या वर्तमान उपयोगकर्ता द्वारा दिए गए विशेषाधिकार के साथ प्रत्येक स्तंभ। COLUMNS सिस्टम के प्रत्येक स्तंभ को सूचीबद्ध करता है CONSTRAINT_COLUMN_USAGE प्रत्येक स्तंभ जिसमें एक बाधा है, इसे परिभाषित किया गया है। CONSTRAINT_TABLE_USAGE प्रत्येक तालिका जिस पर एक बाधा है उसे परिभाषित किया गया है।
ग्रेनाडोडर

2
@mwigdahl - कृपया इस दावे की सिफारिश की गई प्रैक्टिस के लिए एक संदर्भ प्रदान करें।
मार्टिन स्मिथ

526

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

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 देखें


3
खैर यह निश्चित रूप से कम और अधिक गूढ़ है। जिज्ञासा से बाहर, यह बेहतर क्यों है?
माइक के

7
मुमकिन है क्योंकि db_id एक विशिष्ट स्थान में डेटाबेस नाम के लिए जाँच करने की तुलना में अधिक सुरक्षित है[master]
एंथनी

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

3
यदि आपके पास अनुमति के मुद्दे हैं, जैसे आपके पास [मास्टर] तक पहुंचने की अनुमति नहीं है, तो यह अच्छी तरह से काम करता है!
जेसन फोगलिया

2
@MadTigger: आपको [ ]अपनी कॉल में शामिल नहीं करना चाहिए db_id; यह SQL सिंटैक्स है, डेटाबेस नाम का हिस्सा नहीं है।
याकूब क्राल

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

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


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

8

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

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

2

इसे इस्तेमाल करे

IF EXISTS 
   (
     SELECT name FROM master.dbo.sysdatabases 
    WHERE name = N'New_Database'
    )
BEGIN
    SELECT 'Database Name already Exist' AS Message
END
ELSE
BEGIN
    CREATE DATABASE [New_Database]
    SELECT 'New Database is Created'
END
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.