Схема для хранимой процедуры CLR во время развертывания

StackOverflow https://stackoverflow.com/questions/4318549

Вопрос

Я заинтересован в настройке Visual Studio (2010), чтобы при развертывании проектов базы данных C# CLR она ставит вещи в схемы, отличные от DBO. Я понимаю, что могу обновить функцию/процедуру/и т. Д. ... обертки, которые он создает вручную, чтобы это произошло:CLR Хранильные процедуры: как установить схему/владельца?

Тем не менее, я бы действительно хотел как -то автоматизировать процесс. Если кто -нибудь знает, я бы очень признателен на ответ!

Это было полезно?

Решение

Следует отметить, что этот вопрос устарел как Visual Studio 2012, который имеет поле настройки «схемы по умолчанию» для сгенерированных объектов обертки T-SQL. Это также было отмечено в разделе «Обновление» в верхней части следующего ответа ;-) :

CLR Хранильные процедуры: как установить схему/владельца?

Другие советы

Вы можете изменить хранимую процедуру с одной схемы на другую, используя

ALTER SCHEMA Org TRANSFER dbo.spUdpateCompany

Похоже, это связано с безопасностью и сделано «по дизайну». http://support.microsoft.com/kb/918346

Вы можете поместить сценарии для каждого объекта в сценарии пост -развертывания, как ниже. Ниже скрипт воссоздает хранимую процедуру со схемой [org]. Надеюсь это поможет.

Шаг 1 - Удалить хранимую процедуру, добавленную автоматически по проекту, так как она создается с помощью схемы по умолчанию [DBO].

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[spUpdateCompany]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[spUpdateCompany]
GO

Шаг 2 - Удалить хранимую процедуру, если уже существует в схеме [орг] и воссоздайте хранимую процедуру в схеме [org].

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[Org].[spUpdateCompany]') AND type in (N'P', N'PC'))
DROP PROCEDURE [Org].[spUpdateCompany]
GO



CREATE PROCEDURE [Org].[spUpdateCompany]
    @Id int,
    @Name [nvarchar](4000)
WITH EXECUTE AS CALLER
AS
EXTERNAL NAME [SQLServerProject.CLR].[StoredProcedures].[spUpdateCompany]
GO

В свойствах SQLCLR для проекта SSDT вы можете отключить «генерировать DDL». Затем вы можете создать свой собственный объект SQL, который прикрепляется к сборке CLR. Например, добавьте новую сохраненную процедуру как

CREATE PROCEDURE [schema].[StoredProcedure] @parameter BIGINT NULL AS EXTERNAL NAME [AssemblyNameFromProjectProperties].[ClassWithProcedure].[Method]; GO

Это позволит вам размещать разные объекты в разные схемы

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top