2010-11-30 9 views
4

Я заинтересован в настройке Visual Studio (2010), поэтому при развертывании проектов базы данных C# CLR он помещает данные в схемы, отличные от DBO. Я понимаю, что могу обновить функции/процедуру/etc ... wrappers, которые он создает вручную, чтобы это произошло: CLR Stored Procedures: how to set the schema/owner?Схема для хранимой процедуры CLR во время развертывания

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

ответ

4

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

ALTER SCHEMA Org TRANSFER dbo.spUdpateCompany 
1

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

+2

Я говорю о том, что происходит, когда вы щелкните правой кнопкой мыши проект SQL CLR в Визуальная Студия и нажмите «Развернуть». Он помещает вашу сборку в SQL Server, а затем создает функции обертки T-SQL и хранимые процедуры, которые вызывают методы сборки. Насколько я могу судить, эти обертки всегда идут в схему dbo. Я хотел бы поместить их в отдельную схему для организационных целей. До сих пор лучше всего мне удалось вручную отредактировать сценарии SQL до и после развертывания в проекте, чтобы удалить и повторно создать элементы в Схеме, в которой я хочу, но это ручной процесс для каждого элемента. – 2011-01-04 18:45:49

1

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

Step2 - Удалить хранимую процедуру, если уже существуют в [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 
+0

Все это можно упростить до одной строки: ALTER SCHEMA ORG TRANSFER dbo.spUdpateCompany. Любые объекты, связанные с DLL, обязательно удаляются перед развертыванием, поскольку они зависят от DLL. – Griffin 2012-03-14 00:36:47

+0

Я изначально надеялся, что там будет место для настройки схемы в Visuatl Studio, но я ее никогда не нашел. Это подход, который мы использовали ... Pre и Post-Deployment. – 2012-06-27 18:42:28

0

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

CLR Stored Procedures: how to set the schema/owner?