2013-08-14 7 views
7

क्या कोई तरीका है कि मैं कहां से संग्रहीत प्रक्रियाओं को सहेज सकता हूं ताकि मैं फ़ाइलों को अपने डेस्कटॉप पर कॉपी कर सकूं?फ़ाइलों में संग्रहीत प्रक्रियाओं को स्क्रिप्ट कैसे करें?

+3

क्या आपका मतलब एसपी की लिपि है? – christiandev

+0

वे डेटाबेस में संग्रहीत हैं - वे अपनी फाइलों में नहीं हैं। –

+0

संग्रहित प्रक्रियाओं को स्क्रिप्ट करने के लिए एसएसएमएस में एसक्यूएल सर्वर स्क्रिप्ट विज़ार्ड जेनरेट करें [http://technet.microsoft.com/en-us/library/ms186996 (v = sql.105) .aspx)। – AgentSQL

उत्तर

28

संग्रहित प्रक्रियाओं फ़ाइलों के रूप में जमा नहीं कर रहे हैं, वे मेटाडाटा के रूप में जमा कर रहे हैं और हमें के संपर्क में चपरासी (धन्यवाद माइकल रिमाइंडर के बारे में sysschobjs के लिए) सूची विचारों sys.objects, sys.procedures, sys.sql_modules, आदि एक व्यक्ति संग्रहीत प्रक्रिया के लिए में , आप इन विचारों का उपयोग करके सीधे परिभाषा से पूछ सकते हैं (सबसे महत्वपूर्ण sys.sql_modules.definition) या OBJECT_DEFINITION() फ़ंक्शन का उपयोग Nicholas pointed out (हालांकि syscomments का उनका विवरण पूरी तरह सटीक नहीं है)।

सभी संग्रहीत प्रक्रियाओं को एक फ़ाइल में निकालने के लिए, ऑब्जेक्ट एक्सप्लोरर खोलने के लिए एक विकल्प होगा, your server > databases > your database > programmability का विस्तार करें और stored procedures नोड को हाइलाइट करें। फिर F7 (देखें>Object Explorer Details) दबाएं। दाईं तरफ, अपनी इच्छित सभी प्रक्रियाओं का चयन करें, फिर राइट-क्लिक करें, script stored procedure as > create to > file। यह आपके द्वारा चुने गए सभी प्रक्रियाओं के साथ एक एकल फ़ाइल का उत्पादन करेगा। यदि आप प्रत्येक प्रक्रिया के लिए एक फ़ाइल चाहते हैं, तो आप एक समय में केवल एक प्रक्रिया का चयन करके इस विधि का उपयोग कर सकते हैं, लेकिन यह कठिन हो सकता है। आप इस विधि का उपयोग सभी लेखांकन-संबंधित प्रक्रियाओं को एक फ़ाइल में स्क्रिप्ट करने के लिए भी कर सकते हैं, सभी वित्त-संबंधित प्रक्रियाओं को किसी अन्य फ़ाइल में इत्यादि।

प्रति संग्रहीत प्रक्रिया में बिल्कुल एक फ़ाइल जेनरेट करने का एक आसान तरीका Generate Scripts wizard का उपयोग करना होगा - फिर, ऑब्जेक्ट एक्सप्लोरर से शुरू - अपने डेटाबेस पर राइट-क्लिक करें और Tasks > Generate scripts चुनें। Select specific database objects चुनें और शीर्ष-स्तर Stored Procedures बॉक्स को चेक करें। अगला पर क्लिक करें। आउटपुट के लिए Save scripts to a specific location, Save to file, और Single file per object.

एसएसएमएस के आपके संस्करण के आधार पर ये चरण थोड़ा अलग हो सकते हैं।

4

संग्रहीत प्रक्रियाओं को एक अलग फ़ाइल के रूप में "संग्रहीत" नहीं किया जाता है जिसे आप ब्राउज़ करने और डेटाबेस के बिना पढ़ने के लिए स्वतंत्र हैं। यह डेटाबेस में संग्रहीत है जो यह सिस्टम टेबल के सेट में है। परिभाषा वाली तालिका को [sysschobjs] कहा जाता है जो कि हमारे किसी भी अंतिम उपयोगकर्ताओं के लिए भी सुलभ (सीधे) नहीं है।

डेटाबेस से इन संग्रहित प्रक्रियाओं की परिभाषा को पुनः प्राप्त करने के लिए, मैं इस क्वेरी का उपयोग करना चाहते:

select definition from sys.sql_modules 
where object_id = object_id('sp_myprocedure') 

लेकिन मैं हारून के जवाब की तरह। वह कुछ और अच्छे विकल्प देता है।

1

यह आपके द्वारा चलाए जा रहे SQL सर्वर के किस संस्करण पर निर्भर करता है। हाल के संस्करणों के लिए, संग्रहीत प्रक्रियाओं के लिए स्रोत कोड सिस्टम दृश्य sys.sql_modules के माध्यम से उपलब्ध है, लेकिन संग्रहीत प्रक्रिया या उपयोगकर्ता द्वारा परिभाषित फ़ंक्शन (यूडीएफ) के स्रोत को प्राप्त करने का एक आसान तरीका सिस्टम फ़ंक्शन object_definition() (जो sys.ssql_modules की दृश्य परिभाषा का उपयोग कर है) का उपयोग करता है):

select object_definition(object_id('dbo.my_stored_procedure_or_user_defined_function')) 

पुराने संस्करणों में, प्रक्रिया संग्रहीत और यूडीएफ अब पदावनत दृश्य प्रणाली दृश्य sys.syscomments के माध्यम से उपलब्ध था।

और एसक्यूएल सर्वर के पुराने संस्करणों में अभी तक, यह सिस्टम तालिका के माध्यम से उपलब्ध था `dbo.syscomments '

यह notdd कि आपकी पहुंच और कैसे डेटाबेस कॉन्फ़िगर किया गया है के आधार पर, स्रोत नहीं हो सकता है किया जाना चाहिए आपके लिए उपलब्ध है या यह एन्क्रिप्ट किया जा सकता है, जो इसे बहुत उपयोगी नहीं बनाता है।

आप SMO (एसक्यूएल सर्वर प्रबंधन ऑब्जेक्ट्स) का उपयोग कर प्रोग्रामेटिक रूप से स्रोत प्राप्त कर सकते हैं। http://technet.microsoft.com/en-us/library/hh248032.aspx

+0

'syscomments' 2000 में मान्य था, लेकिन यह SQL सर्वर 2005 तक' sys.syscomments' के रूप में उपलब्ध नहीं था। 'Sys.sql_modules' SQL सर्वर 2005 के बाद से उपलब्ध है, इसलिए 'dbo.syscomments का उपयोग करने के बीच कोई अंतर नहीं था 'और 'sys.sql_modules' पर स्विचिंग। –

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