Схема для хранимой процедуры CLR во время развертывания
-
29-09-2019 - |
Вопрос
Я заинтересован в настройке Visual Studio (2010), чтобы при развертывании проектов базы данных C# CLR она ставит вещи в схемы, отличные от DBO. Я понимаю, что могу обновить функцию/процедуру/и т. Д. ... обертки, которые он создает вручную, чтобы это произошло:CLR Хранильные процедуры: как установить схему/владельца?
Тем не менее, я бы действительно хотел как -то автоматизировать процесс. Если кто -нибудь знает, я бы очень признателен на ответ!
Решение
Следует отметить, что этот вопрос устарел как Visual Studio 2012, который имеет поле настройки «схемы по умолчанию» для сгенерированных объектов обертки T-SQL. Это также было отмечено в разделе «Обновление» в верхней части следующего ответа ;-) :
Другие советы
Вы можете изменить хранимую процедуру с одной схемы на другую, используя
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
Это позволит вам размещать разные объекты в разные схемы