部署期间CLR存储过程的模式

时间:2010-11-30 20:56:51

标签: sql-server sqlclr sql-server-data-tools

我对配置Visual Studio(2010)感兴趣,这样在部署C#CLR数据库项目时,它会将内容放在DBO以外的模式中。我知道我可以更新函数/ procedure / etc ...它手动创建的包装器来实现这一点: CLR Stored Procedures: how to set the schema/owner?

但是,我真的想以某种方式自动化这个过程。如果有人知道,我真的很感激答案!

5 个答案:

答案 0 :(得分:4)

您可以使用

将存储过程从一个模式更改为另一个模式
ALTER SCHEMA Org TRANSFER dbo.spUdpateCompany

答案 1 :(得分:1)

它似乎与安全相关,并且“按设计”完成。 http://support.microsoft.com/kb/918346

答案 2 :(得分:1)

您可以在后部署脚本中为每个对象放置脚本,如下所示。下面的脚本使用schema [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

答案 3 :(得分:1)

在SSDT项目的SQLCLR属性中,可以关闭“生成DDL”。然后,您可以创建附加到CLR程序集的自己的SQL对象。例如,添加一个新的存储过程为

/v1/method

这将允许您将不同的对象放在不同的模式中

答案 4 :(得分:0)

应该提到的是,从Visual Studio 2012开始,这个问题已经过时,它为生成的T-SQL包装器对象提供了“默认架构”配置字段。以下答案; - )顶部的“更新”部分也注明了这一点:

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