سؤال

أنا أعمل على ينق على أساس CLR المخزنة إجراء بعض تصفية معقدة و التلاعب التي يمكن أن تتطلب الكثير من الفوضى وسوء performant T-SQL البرمجية ، إذا ما نفذت بطريقة أكثر "التقليدية" الإجراء المخزن.

هذا هو عمل عظيم, ولكن أنا لا يمكن العثور على كيفية إعداد مخطط هذا الإجراء المخزن في مرحلة النشر ، على تنظيم أفضل والفصل بين كائنات قاعدة البيانات في وحدات.

أي أفكار ؟

شكرا جزيلا مقدما.

هل كانت مفيدة؟

المحلول

عند إنشاء إجراء الرجوع إلى التجمع يمكنك إنشاء هذا المجمع التي يملكها أي مخطط تريد. انظر هذه المقالة MSDN على نشر إجراءات CLR المخزنة للحصول على إرشادات حول كيفية القيام بنشر الإجراء المخزن. عن طريق تغيير بيان إنشاء الإجراء إلى شيء من هذا القبيل:

CREATE SCHEMA foo

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

هل يمكن أن يكون الآن إجراء المملوكة للمخطط foo.

نصائح أخرى

تحديث: في Visual Studio 2012 هذا الآن يمكن أن يتحقق عن طريق خصائص المشروع نافذة "قاعدة بيانات SQL Server المشروع". الممتلكات ذات الصلة هو "مخطط افتراضي" على "إعدادات المشروع" علامة التبويب.تعديل هذه القيمة يعدل ولدت النشر النصي وضع اسم المخطط أمام مهام الإجراءات المخزنة ، الخ...تأكد من إضافة مخطط كائن إلى المشروع الخاص بك مع نفس الاسم أو سوف تحصل أخطاء بناء.


أنا لا أعرف ما هو إصدار Visual Studio كنت تستخدم ، ولكن عند إنشاء CLR المخزنة الإجراء المشروع في Visual Studio 2010, يتضمن المشروع اثنين من البرامج النصية SQL:PreDeploymentScript.sql و PostDeploymentScript.sql.

نحن فقط استخدام هذه maniuplate الأشياء بالطريقة التي نريد.

في ما قبل النشر النصي لدينا شيء من هذا القبيل:

-- 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

ثم في ما بعد النشر النصي لدينا هذا:

-- 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

على أمل أن يساعد!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top