2012-12-20 18 views
5

हम अपने सभी डेटाबेस में जाँच rerunnable स्क्रिप्ट के रूप में स्रोत नियंत्रण में वस्तुओं (विचारों, कार्यों, ट्रिगर & संग्रहित प्रक्रियाओं आदि ...)SQL सर्वर संग्रहीत प्रक्रियाओं को निम्न तरीके से बनाने के डाउनसाइड्स क्या हैं?

जब यह तैनात करने के लिए समय आता है, हमें यह सुनिश्चित करना है कि सभी स्क्रिप्ट फिर से कर रहे हैं की जरूरत है -नने योग्य & दोहराने योग्य ताकि एक संग्रहीत प्रक्रिया नवीनतम संस्करण में बनाई/अपडेट की जा सके।

क्या निम्न तरीके से स्क्रिप्ट बनाने के लिए कोई डाउनसाइड्स हैं।

IF NOT EXISTS 
(
    SELECT  * 
    FROM  INFORMATION_SCHEMA.ROUTINES 
    WHERE  ROUTINE_SCHEMA = 'dbo' 
    AND   ROUTINE_NAME = 'MyStoredProcedure' 
) 
BEGIN 
    EXEC ('CREATE PROCEDURE [dbo].[MyStoredProcedure] AS SELECT 1') 
    -- ALSO DO ANY INITIAL GRANT PRIVILEGE SCRIPTING HERE 
END 
GO 
ALTER PROCEDURE [dbo].[MyStoredProcedure] (
    @param1 INT, 
    @param2 NVARCHAR(50) = 'Default String' 
) 
AS 
BEGIN 
    -- DO SOMETHING WITH @param1 AND @param2 
    SELECT 1; 
END 
GO 

अनिवार्य रूप से स्क्रिप्ट अगर वस्तु प्रासंगिक प्रणाली दृश्य में मौजूद है देखने के लिए जाँच करता है, और अगर यह मौजूद नहीं है, कुछ गतिशील एसक्यूएल आसपास CREATE PROCEDURE/GO बयान मुद्दों प्राप्त करने के लिए सशर्त में अनुमति नहीं किया जा रहा एक ठूंठ के रूप में यह बनाता है ब्लॉक। फिर यह ALTER के माध्यम से स्क्रिप्ट की वास्तविक कार्यक्षमता लागू करता है।

तो फायदे मेरे लिए स्पष्ट हैं, मैं सोच रहा हूं कि ऐसा करने के लिए कोई डाउनसाइड्स है ... थोड़ा अधिक वर्बोज स्क्रिप्ट लिखने के मामूली ओवरहेड के अलावा।

+0

आपको इस बारे में कुछ करीबी/व्यक्तिपरक वोट मिलेंगे कि आपने इसे कैसे phrased किया है, और यह किसी भी तरह से डीबीए के लिए बेहतर हो सकता है, लेकिन मुझे यह पिछली कंपनी में एक समस्या का एक दिलचस्प समाधान मिल गया है। – Joe

+0

अच्छी तरह से मुझे लगता है कि मैं वैध तकनीकी "डाउनसाइड्स" की तलाश में हूं ... यानी क्या 'अलर्टिंग' के बजाय 'ड्रॉप/CREATE'' के कोई तकनीकी कारण हैं? निष्पादन योजना आदि पर 'ALTERS' का कोई प्रभाव हो सकता है ... –

+4

यह एक शर्म की बात है कि SQL सर्वर लगभग दो दशकों पुराना है, और फिर भी वे 'निर्माण या स्थान' आदेश को लागू करने के लिए चारों ओर नहीं मिल पाए हैं। – SWeko

उत्तर

2

10 साल SQL सर्वर डेवलपर/आर्किटेक्ट यहां, और मैं स्क्रिप्ट बनाने की अपेक्षाकृत मामूली लागत (अपेक्षाकृत मामूली) के अलावा किसी भी डाउनसाइड्स के बारे में नहीं सोच सकता जो ऐसा करेगा।

यदि आप चिंतित हैं कि निर्माण के समय तुच्छ के रूप में संकलित एक योजना को पुन: संकलित नहीं किया जाता है, तो प्रक्रिया को बदलने के बाद, आप प्रत्येक के लिए SP_RECOMPILE को एक स्पष्ट कॉल जोड़ सकते हैं, लेकिन मुझे यह समस्या SQL सर्वर के साथ कभी नहीं मिली है (मैंने इसे डीबी 2 के साथ किया है) और इसलिए मुझे लगता है कि अत्यधिक सावधानी बरतनी है।

यह एक दिलचस्प है और मुझे उपयोगी दृष्टिकोण लगता है।

+1

एसक्यूएल सर्वर एसपी निर्माण समय पर एक योजना संकलित नहीं करता है। इसे निर्माण समय पर पार्स किया जाता है लेकिन पहले निष्पादन पर संकलित किया जाता है और 'ALTER PROC' चलाना किसी भी कैश योजना को अमान्य कर देगा। –

+0

आप निश्चित रूप से सही हैं। :) शायद मुझे 'सृजन के समय' नहीं कहा जाना चाहिए था। जब मैं संकलन और लिंक करता हूं, और केवल डीबी 2 के साथ, जब अनुप्रयोग ढांचे संग्रहित प्रक्रियाओं को निष्पादित करते हैं, तो मैंने इसमें भाग लिया है। जैसा कि मैंने कहा, मुझे लगता है कि यह सावधानी बरतने की अत्यधिक डिग्री है - यह वास्तव में एकमात्र आपत्ति या चेतावनी है जिसके साथ मैं आ सकता हूं। – DeanGC

+0

प्रतिक्रिया डीन और मार्टिन के लिए धन्यवाद। ~ EoinC –

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

  • कोई संबंधित समस्या नहीं^_^