SQL सर्वर (2008 R2) में असेंबली को ड्रॉप और री-क्रिएट करने के बिना मैं CLR फ़ंक्शन (या प्रक्रिया) असेंबली dll को कैसे अपडेट कर सकता हूं?
जैसा कि यह अब खड़ा है अगर मैं एक विधानसभा को अपडेट करता हूं (उदाहरण के लिए एक नया फ़ंक्शन जोड़ने के लिए), SQL सर्वर तब तक अद्यतन dll का सम्मान नहीं करेगा जब तक मैं असेंबली को नहीं छोड़ता:
DROP ASSEMBLY CLRFunctions
Msg 6590, Level 16, State 1, Line 1
DROP ASSEMBLY failed because 'CLRFunctions' is referenced by object 'NormalizeString'.
लेकिन इससे पहले कि मैं विधानसभा को गिरा सकता हूं, मुझे पहले उन सभी कार्यों को छोड़ देना चाहिए जो इसे संदर्भित करते हैं:
DROP FUNCTION NormalizeString
DROP FUNCTION RemoveDiacritics
DROP FUNCTION RemoveCombiningDiacritics
DROP FUNCTION CombineLigatures
....
DROP FUNCTION PseudolocalizeArabic
और फिर मैं विधानसभा को छोड़ सकता हूं:
DROP ASSEMBLY CLRFunctions
अब मुझे विधानसभा बनाना है :
CREATE ASSEMBLY CLRFunctions FROM 'c:\foos\CLRFunctions.dll';
और अब मुझे उन सभी यूडीएफ की घोषणा का शिकार करना है जो मुझे हटाने से पहले पंजीकृत किए गए थे।
मैं इसके बजाय एक असेंबली को अपडेट करूंगा , और SQL सर्वर का उपयोग करना शुरू कर देगा।
अद्यतन : मैं बेतरतीब ढंग DBCC FREEPROCCACHE
से एक "recompile" की कोशिश की , लेकिन SQL सर्वर अभी भी पुराने कोड का उपयोग करता है।
अद्यतन : मैंने असेंबली dll को हटा दिया CLRFunctions.dll
, और SQL सर्वर अभी भी कोड को चलाने में सक्षम है (बिना कोड जो असंभव होना चाहिए)।