2009-05-13 8 views
7

Я работаю над хранимой процедурой CLR, основанной на Linq, для некоторой сложной фильтрации и манипуляций, которая в противном случае потребовала бы много грязного и плохо исполняемого кода T-SQL, если бы оно реализовано в более «традиционной» хранимой процедуре.CLR Хранимые процедуры: как установить схему/владельца?

Это прекрасно работает, но я не могу найти, как установить схему этой хранимой процедуры в фазе развертывания, для лучшей организации и разделения объектов базы данных в модулях.

Любые идеи?

Большое спасибо заранее.

+0

Этот запрос, насколько он связан с установкой схемы в развертывании Visual Studio/SSDT, устарел, как и VS 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

Оболочка SQL - необходимая часть. Вы все равно должны это сделать - это неотъемлемая часть развертывания хранимых процедур CLR. – ConcernedOfTunbridgeWells

+0

Большое спасибо и извините за задержку, заняты чем-то еще тем временем. Я больше не развертываю непосредственно из Visual Studio. Вместо этого я развертываю скрипты, поэтому я могу более легко указать схему, которую я хочу, используя обертку, как вы предположили. Еще раз большое спасибо за вашу помощь. –

9

UPDATE: В Visual Studio 2012 это теперь можно выполнить с помощью окна свойств проекта «Project Database Database SQL». Соответствующим свойством является «Схема по умолчанию» на вкладке «Настройки проекта». Изменение этого значения изменяет сгенерированный сценарий развертывания, чтобы поместить имя схемы перед функциями, хранимыми процедурами и т. Д. Обязательно добавьте объект Schema в проект с тем же именем или вы получите ошибки сборки.


Я не знаю, какая версия 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 

Надежда, что помогает!

 Смежные вопросы

  • Нет связанных вопросов^_^