2009-05-13 11 views
7

मैं कुछ जटिल फ़िल्टरिंग और हेरफेर के लिए एक लिंक आधारित सीएलआर संग्रहीत प्रक्रिया पर काम कर रहा हूं, जो अन्यथा "पारंपरिक" संग्रहीत प्रक्रिया में लागू होने पर बहुत गन्दा और खराब प्रदर्शन करने वाले टी-एसक्यूएल कोड की आवश्यकता होगी।सीएलआर संग्रहित प्रक्रियाएं: स्कीमा/मालिक को कैसे सेट करें?

यह बहुत अच्छा काम कर रहा है, लेकिन मुझे एक बेहतर संगठन और मॉड्यूल में डेटाबेस ऑब्जेक्ट्स को अलग करने के लिए तैनाती के चरण में इस संग्रहीत प्रक्रिया की स्कीमा सेट करने का तरीका नहीं मिल रहा है।

कोई विचार?

अग्रिम में बहुत धन्यवाद।

+0

यह अनुरोध, जहां तक ​​यह विजुअल स्टूडियो/एसएसडीटी परिनियोजन में स्कीमा सेट करने से संबंधित है, वीएस 2012 के रूप में अप्रचलित है। कृपया नीचे दिए गए उत्तर के शीर्ष पर ** अद्यतन ** अनुभाग देखें: http: // stackoverflow.com/a/4597610/577765 –

उत्तर

2

जब आप असेंबली का संदर्भ देने की प्रक्रिया बनाते हैं तो आप इस रैपर को अपनी इच्छित स्कीमा के स्वामित्व में बना सकते हैं। संग्रहीत प्रक्रिया को तैनात करने के तरीके की पैदल यात्रा के लिए This MSDN article on deploying CLR stored procedures देखें। की तरह कुछ करने के लिए प्रक्रिया बनाने के बयान बदलने के द्वारा:

CREATE SCHEMA foo 

CREATE PROCEDURE foo.hello 
AS 
EXTERNAL NAME helloworld.HelloWorldProc.HelloWorld 

अब आप foo स्कीमा के स्वामित्व वाली प्रक्रिया हो सकती है।

+0

बहुत धन्यवाद। मुझे वह लेख मिला था और मैं इसे एक कामकाज के रूप में देख सकता था, लेकिन मैं सोच रहा था कि क्या कोई अन्य विकल्प है जिसके लिए एक रैपर की आवश्यकता नहीं होगी या फिर दूसरी वस्तु नहीं होगी। क्या आप किसी के बारे में जानते हैं या क्या यह एकमात्र वास्तविक संभावना है? फिर, त्वरित प्रतिक्रिया के लिए धन्यवाद :) –

+0

एसक्यूएल रैपर एक आवश्यक हिस्सा है। आपको वैसे भी ऐसा करना है - यह सीएलआर संग्रहीत प्रक्रियाओं को तैनात करने का एक अभिन्न हिस्सा है। – ConcernedOfTunbridgeWells

+0

देरी के लिए बहुत धन्यवाद और खेद है, इस बीच कुछ और व्यस्त रहा है। मैं विजुअल स्टूडियो से सीधे तैनात नहीं कर रहा हूं। इसके बजाए, मैं स्क्रिप्ट के माध्यम से तैनाती कर रहा हूं, इसलिए जैसा कि आपने सुझाव दिया है, मैं एक रैपर का उपयोग कर स्कीमा को अधिक आसानी से निर्दिष्ट कर सकता हूं। आपकी मदद के लिए बहुत धन्यवाद। –

9

अद्यतन: विजुअल स्टूडियो 2012 में यह अब "SQL सर्वर डेटाबेस प्रोजेक्ट" की प्रोजेक्ट प्रॉपर्टी विंडो के माध्यम से पूरा किया जा सकता है। "प्रोजेक्ट सेटिंग्स" टैब पर प्रासंगिक संपत्ति "डिफ़ॉल्ट स्कीमा" है। इस मान को संशोधित करने से स्कीमा नाम को कार्य, संग्रहीत प्रक्रियाओं, आदि के सामने रखने के लिए जेनरेट की गई तैनाती स्क्रिप्ट को संशोधित किया गया है ... एक ही नाम के साथ अपनी परियोजना में स्कीमा ऑब्जेक्ट जोड़ना सुनिश्चित करें या आपको बिल्ड त्रुटियां मिलेंगी।


मैं दृश्य स्टूडियो के किस संस्करण का उपयोग कर रहे पता नहीं है, लेकिन जब आप दृश्य स्टूडियो 2010 में एक CLR संग्रहीत प्रक्रिया परियोजना बनाने, परियोजना दो SQL स्क्रिप्ट में शामिल हैं: PreDeploymentScript.sql और PostDeploymentScript.sql।

हम इन चीजों को मैन्युअल रूप से जिस तरह से चाहते हैं, उसका उपयोग करने के लिए उपयोग करते हैं।

पूर्व तैनाती स्क्रिप्ट में, हम कुछ इस तरह है:

-- DEPLOYMENT WIZARD RECREATES ITEM IN dbo SCHEMA 
-- DROP NEW ITEM FROM dbo SCHEMA 
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[fn_Create_Md5_Hash]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT')) 
DROP FUNCTION [dbo].[fn_Create_Md5_Hash] 
GO 

-- RECREATE THE ITEM BACK IN THE SCHEMA YOU WANT 
CREATE FUNCTION [Utilities].[fn_Create_Md5_Hash](@source [varbinary](max)) 
RETURNS [varbinary](8000) WITH EXECUTE AS CALLER 
AS 
EXTERNAL NAME [NameSpace].[UserDefinedFunctions].[fn_Create_Md5_Hash] 
GO 

आशा है कि मदद करता है:

-- DROP EXISTING ITEM FROM CURRENT SCHEMA 
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[Utilities].[fn_Create_Md5_Hash]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT')) 
DROP FUNCTION [Utilities].[fn_Create_Md5_Hash] 
GO 

फिर, के बाद तैनाती लिपि में, हम इस है!

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