2012-09-11 14 views
43

में डेटाबेस ड्रॉप और पुनर्निर्मित करना मैं माइक्रोसॉफ्ट एसक्यूएल सर्वर 2008 आर 2 एसपी 1 के साथ प्रयोग और सीख रहा हूं। मेरे पास एक डेटाबेस है जहां मैंने कई प्रयोग किए हैं। अब मैं इसे छोड़ना और फिर से बनाना चाहता हूं। इसलिए मैं डेटाबेस से निर्माण स्क्रिप्ट निकालने के लिए, मैं इसे हटा देता हूं और मैं इसे फिर से बनाने के लिए स्क्रिप्ट का उपयोग करता हूं। मेरे आश्चर्य के लिए, सभी टेबल, कुंजी आदि अभी भी वहां हैं। मैं डेटाबेस कैसे छोड़ूं, ताकि मैं डेटाबेस को स्क्रैच से पुनर्निर्माण कर सकूं?माइक्रोसॉफ्ट एसक्यूएल सर्वर

उत्तर

76
USE master 
IF EXISTS(select * from sys.databases where name='yourDBname') 
DROP DATABASE yourDBname 

CREATE DATABASE yourDBname 
+0

आप सही हैं, मेरा सवाल बेवकूफ था। असल में, जिन टेबलों को मैं देखना जारी रख रहा था, वे वास्तव में मेरे डेटाबेस के बजाय मास्टर डेटाबेस में बनाए गए थे। –

+0

इससे मुझे बहुत मदद मिली! –

1

मैं डेटाबेस

से निर्माण स्क्रिप्ट निकालने इस डेटाबेस में सब कुछ (टेबल, कुंजी आदि) के लिए निर्माण स्क्रिप्ट निकालें। आप बस एक खाली डेटाबेस बनाने के लिए चाहते हैं, बस चलाने CREATE DATABASE <dbname>

22

AnandPhadke करने के लिए +1 कोड के अपने हिस्से के लिए

इस कोड को डेटाबेस के लिए सभी सक्रिय कनेक्शन बंद करें और उसके होगा इसे छोड़

WHILE EXISTS(select NULL from sys.databases where name='YourDBName') 
BEGIN 
    DECLARE @SQL varchar(max) 
    SELECT @SQL = COALESCE(@SQL,'') + 'Kill ' + Convert(varchar, SPId) + ';' 
    FROM MASTER..SysProcesses 
    WHERE DBId = DB_ID(N'YourDBName') AND SPId <> @@SPId 
    EXEC(@SQL) 
    DROP DATABASE [YourDBName] 
END 
GO 

CREATE DATABASE YourDBName 
GO 
6

डीबीएनएएम को एक से अधिक बार टाइप करने की आवश्यकता है त्रुटि प्रवण है, किसी बिंदु पर इसे असंगत प्रविष्टियों और अनपेक्षित परिणामों के साथ निष्पादित किया जाएगा।

आनंद समर्थन के साथ आनंदधाके या पियरे के उत्तरों को मेरे लिए प्राथमिकता दी जाएगी।

DECLARE @DBName varchar(50) = 'YourDatabaseName' 
USE master 
IF EXISTS(select * from sys.databases where name= @DBName) 
EXEC('DROP DATABASE ' + @DBName) 

EXEC('CREATE DATABASE ' + @DBName) 

या

DECLARE @DBName varchar(50) = 'YourDatabaseName' 
WHILE EXISTS(select NULL from sys.databases where name = @DBName) 
BEGIN 
    DECLARE @SQL varchar(max) 
    SELECT @SQL = COALESCE(@SQL,'') + 'Kill ' + Convert(varchar, SPId) + ';' FROM MASTER..SysProcesses WHERE DBId = DB_ID(@DBName) AND SPId <> @@SPId 
    EXEC(@SQL) 
    EXEC('DROP DATABASE ' + @DBName) 
END 
GO 
-1

यह मेरे लिए सबसे अच्छा काम करता है: (?)

if exists (select name from sys.databases where name='YourDBName') 
alter database YourDBName set single_user with rollback immediate 
go 
if exists (select name from sys.databases where name='YourDBName') 
drop database YourDBName 
+0

यह वास्तव में प्रश्न का उत्तर नहीं देता है। यदि आपके पास कोई अलग प्रश्न है, तो आप [प्रश्न पूछें] (http://stackoverflow.com/questions/ask) पर क्लिक करके पूछ सकते हैं। एक बार आपके पास पर्याप्त [प्रतिष्ठा] (http://stackoverflow.com/help/) हो जाने पर आप इस प्रश्न पर अधिक ध्यान आकर्षित करने के लिए [एक बक्षीस] (http://stackoverflow.com/help/privileges/set-bounties) भी जोड़ सकते हैं। क्या-प्रतिष्ठा)। - [समीक्षा से] (/ समीक्षा/कम गुणवत्ता वाली पोस्ट/12598382) –

+0

मेरा मानना ​​है कि आपने इस जवाब को गलत तरीके से गलत किया है, @ खान इमरान अली। यह जवाब देने की कोशिश करता है, हालांकि खराब है। इसे मतदान करके नियंत्रित किया जाना चाहिए, झंडे और नकारात्मक समीक्षा से नहीं। – Palec

+1

कृपया अपना कोड क्या करता है और यह प्रश्न का उत्तर कैसे देता है, इसकी व्याख्या शामिल करें। अगर आपको एक कोड स्निपेट उत्तर के रूप में मिलता है, तो आप नहीं जानते कि इसके साथ क्या किया जाए। उत्तर ओपी और भविष्य के आगंतुकों मार्गदर्शन देना चाहिए। बताते हुए, आपके कोड के पीछे क्या विचार है, इस मुद्दे को समझने और आपके समाधान को लागू करने या संशोधित करने में काफी मदद करता है। – Palec

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