हम अपने सभी डेटाबेस में जाँच 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
के माध्यम से स्क्रिप्ट की वास्तविक कार्यक्षमता लागू करता है।
तो फायदे मेरे लिए स्पष्ट हैं, मैं सोच रहा हूं कि ऐसा करने के लिए कोई डाउनसाइड्स है ... थोड़ा अधिक वर्बोज स्क्रिप्ट लिखने के मामूली ओवरहेड के अलावा।
आपको इस बारे में कुछ करीबी/व्यक्तिपरक वोट मिलेंगे कि आपने इसे कैसे phrased किया है, और यह किसी भी तरह से डीबीए के लिए बेहतर हो सकता है, लेकिन मुझे यह पिछली कंपनी में एक समस्या का एक दिलचस्प समाधान मिल गया है। – Joe
अच्छी तरह से मुझे लगता है कि मैं वैध तकनीकी "डाउनसाइड्स" की तलाश में हूं ... यानी क्या 'अलर्टिंग' के बजाय 'ड्रॉप/CREATE'' के कोई तकनीकी कारण हैं? निष्पादन योजना आदि पर 'ALTERS' का कोई प्रभाव हो सकता है ... –
यह एक शर्म की बात है कि SQL सर्वर लगभग दो दशकों पुराना है, और फिर भी वे 'निर्माण या स्थान' आदेश को लागू करने के लिए चारों ओर नहीं मिल पाए हैं। – SWeko