我有兴趣配置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]模式中已经存在的存储过程,并在[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

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

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

这将使您能够将不同的对象放在不同的模式中

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top