2010-12-28 14 views
7

में इंडेक्स, कुंजी, विदेशी कुंजी स्क्रिप्ट कैसे करें मैं SQL सर्वर (2008) में डेटाबेस से सभी अनुक्रमणिका, कुंजी और विदेशी कुंजी का विवरण प्राप्त करना चाहता हूं। मैं यह कैसे करु?SQL सर्वर

मैं उन गुणों को कुछ हद तक समान डेटाबेस में सिंक्रनाइज़ करने के लिए इसका उपयोग करने की योजना बना रहा हूं।

मैं SQL सर्वर प्रबंधन स्टूडियो का उपयोग कर सकता हूं, लेकिन मैं वेब होस्टर द्वारा निर्धारित प्रतिबंधों के कारण डेटाबेस का पूर्ण बैकअप नहीं कर सकता।

-

माध्यमिक सवाल है कि आप जवाब देने के लिए की जरूरत नहीं है:

क्यों MySQL में डेटाबेस स्कीमा कि बस पाठ SQL स्क्रिप्ट में डेटाबेस संरचना के सभी सूचीबद्ध करता है के लिए इसी तरह कुछ हो नहीं कर सकता प्रारूप?

+0

मैं इसे एक स्क्रिप्ट से करना चाहता हूं। MySQL में मैं प्रत्येक तालिका के लिए "तालिका बना सकता हूं उदाहरण तालिका" दिखाऊंगा। – tomsv

उत्तर

6

मान लिया जाये कि आप कम से कम SQL सर्वर 2005 या इसके बाद के संस्करण का उपयोग कर रहे हैं, तो आप स्क्रिप्ट अपने स्कीमा

यह केवल स्कीमा, डेटा या दोनों के लिए स्क्रिप्ट उत्पन्न करने के लिए इस्तेमाल किया जा सकता करने के लिए Database Publishing Wizard उपयोग कर सकते हैं।

यह आप VS2008 उपयोग कर रहे हैं दृश्य स्टूडियो 2005 और/या विजुअल वेब डेवलपर 2005

में सीधे एकीकृत करता है, एसक्यूएल प्रकाशन विज़ार्ड के v1.2 संस्करण पहले से स्थापित आता है। आप here कहां से इसे आमंत्रित कर सकते हैं।

+0

+1, यह वाकई अच्छा है। - Liste डेर Objekte फर Skripterstellung wird zusammengestellt (Erfolg) मर - Skripterstellung फर Objekte (Fehler) Meldungen ऑपरेशन नहीं वैध कारण के लिए है स्थिति der Datenbankveröffentlichung : –

+0

मैं जब मैं स्कीमा प्रकाशित करने का प्रयास इस से कोई त्रुटि मिलती है वस्तु की वर्तमान स्थिति। (SqlPubWiz) - स्क्रिप्ट विर्ड auf den datenträger geschrieben (beendet) (जर्मन त्रुटि संदेशों के लिए खेद है) – tomsv

+0

क्या आप इसे कमांड लाइन से या वीएस के माध्यम से चला रहे हैं? – InSane

1

इनसेन के सही उत्तर के विकल्प के रूप में, आप एसएसएमएस में किसी भी ऑब्जेक्ट को टेक्स्ट फ़ाइल या विंडो में स्क्रिप्ट करने के लिए राइट क्लिक कर सकते हैं।
कुछ मुफ्त और गैर-मुक्त उत्पाद भी आपको WinSQL समेत इसकी अनुमति देते हैं।

5

यदि आप ग्रैन्युलर, स्क्रिप्ट के लिए अधिक विशिष्ट ऑब्जेक्ट्स की तलाश में हैं तो आप संबंधित डीबी के Task > Generate Scripts विकल्प से जेनरेट स्क्रिप्ट का उपयोग भी कर सकते हैं।

विवरण के लिए http://www.kodyaz.com/articles/sql-server-script-data-with-generate-script-wizard.aspx देखें।

2

आप तो केवल xp_cmdshell का उपयोग कर T-SQL से स्क्रिप्ट प्राप्त करने के लिए की जरूरत है। उदाहरण के लिए एसएमओ और powershell (परिणाम @script चर में है, तो आप sp_executesql साथ निष्पादित कर सकता है) के साथ concreate देखने के concreate सूचकांक को स्क्रिप्ट:

DECLARE @OUTPUT TABLE (line nvarchar(max)) 
DECLARE @cmd VARCHAR(8000), @ps VARCHAR(8000), @psLoadAssemblies VARCHAR(8000), @script nvarchar(max) ='' 
DECLARE @srv nvarchar(max)='<server name>', 
     @ln nvarchar(max)='<login>', 
     @pw nvarchar(max)='<password>', 
     @db nvarchar(max) = '<database>', 
     @schemaName nvarchar(max) = '<schema>', -- without '[' ']' 
     @viewName nvarchar(max) = '<view name>', -- without '[' ']' 
     @indexName nvarchar(max) = '<index name>' -- without '[' ']' 

SET @psLoadAssemblies = '[System.Reflection.Assembly]::LoadWithPartialName(''Microsoft.SqlServer.SMO'')|Out-Null;' 
SET @ps='$using=''Microsoft.SqlServer.Management.Smo'';$s=new-object($using+''.Server'') $srv;$c = $s.ConnectionContext;$c.LoginSecure=$false;$c.Login=$ln;$c.Password=$pw; Write-Host ($s.Databases[$db].Views.Item($viewName,$schemaName).Indexes[$indexName].Script())' 
SET @ps=REPLACE(@ps,'$srv',''''[email protected]+'''') 
SET @ps=REPLACE(@ps,'$ln',''''[email protected]+'''') 
SET @ps=REPLACE(@ps,'$pw',''''[email protected]+'''') 
SET @ps=REPLACE(@ps,'$db',''''[email protected]+'''') 

SET @ps=REPLACE(@ps,'$schemaName',''''[email protected]+'''') 
SET @ps=REPLACE(@ps,'$viewName',''''[email protected]+'''') 
SET @ps=REPLACE(@ps,'$indexName',''''[email protected]+'''') 

SET @cmd = 'powershell -Command "'[email protected][email protected]+'"' 
exec dev.Msg @cmd 
INSERT INTO @OUTPUT 
exec xp_cmdshell @cmd 

SELECT @script+line FROM @OUTPUT 
WHERE line is not null 

PRINT @script 

पी.एस. उन लोगों के लिए जो पूछते हैं कि हमें ऐसी चाल क्यों चाहिए: कुछ परिदृश्यों में, उदा। "थर्ड पार्टी टूल का उपयोग करके डेटा आयात करें", "ड्रॉप-रीवेटेट" दृष्टिकोण "सक्षम-अक्षम" ऑब्जेक्ट्स से बेहतर काम करता है, उदा। क्योंकि ऐसा तीसरा पक्ष टूल "ट्रंकेट" कह सकता है और यदि आपकी तालिका स्कीमा-बाउंड व्यू में भाग लेती है तो आपको एक थर्ड पार्टी टूल त्रुटि मिल जाएगी (अनुक्रमित दृश्यों में भाग लेने वाली तालिका को एक त्रुटि फेंकता है, इसलिए हमें सभी इंडेक्स के साथ दृश्य छोड़ने के लिए मजबूर होना पड़ता है आयात करने से पहले और इसे फिर से बनाएं)।

0

मैंने उपयोगकर्ता "dontomoso" की टिप्पणी या उत्तर देखा है। अंग्रेजी में अनुवाद करने के बाद ऐसा लगता है कि "डेटाबेस प्रकाशन विज़ार्ड" में ऑब्जेक्ट की वर्तमान स्थिति के कारण ऑपरेशन मान्य नहीं है। (SqlPubWiz) "त्रुटि अनुभवी है।

इस ऐप में इतने सारे प्रयोगों और परीक्षणों के बाद। डेटाबेस नाम केस संवेदनशील है। -d पैरामीटर के लिए सही केस मान रखें।समाधान सरल है, डिफ़ॉल्ट स्कीमा नाम या प्रारंभिक कैटलॉग नाम को "डीबी बनाते समय उपयोग किया जाता है" के रूप में बदलें। जैसे PlayGround का उपयोग करते समय बनाते समय, playGround का भी उपयोग करें ... खेल का मैदान या खेल का मैदान या PlayGround इस त्रुटि को उत्पन्न करेगा।

मुझे आशा है कि यह मदद होगी!