Схема для хранимой процедуры CLR во время развертывания - PullRequest
5 голосов
/ 30 ноября 2010

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

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

Ответы [ 5 ]

4 голосов
/ 25 января 2013

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

ALTER SCHEMA Org TRANSFER dbo.spUdpateCompany
1 голос
/ 14 июня 2019

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

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

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

1 голос
/ 28 августа 2015

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

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

1 голос
/ 30 июня 2011

Вы можете поместить сценарии для каждого объекта в сценарий после развертывания, как показано ниже. Ниже скрипт заново создает хранимую процедуру со схемой [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], и заново создать хранимую процедуру в схеме [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
1 голос
/ 03 января 2011

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

...