我对配置 Visual Studio (2010) 感兴趣,以便在部署 C# CLR 数据库项目时,它会将内容放入 DBO 以外的模式中。我知道我可以更新函数/过程/等...它手动创建的包装器以实现这一点: CLR 存储过程:如何设置架构/所有者?
但是,我真的很想以某种方式自动化这个过程。如果有人知道,我真的很感激答案!
我对配置 Visual Studio (2010) 感兴趣,以便在部署 C# CLR 数据库项目时,它会将内容放入 DBO 以外的模式中。我知道我可以更新函数/过程/等...它手动创建的包装器以实现这一点: 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
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
应该提到的是,这个问题在 Visual Studio 2012 中已经过时,它为生成的 T-SQL 包装器对象提供了“默认架构”配置字段。在以下答案顶部的“更新”部分中也注意到了这一点;-):
在 SSDT 项目的 SQLCLR 属性中,您可以关闭“生成 DDL”。然后,您可以创建自己的附加到 CLR 程序集的 SQL 对象。例如,添加一个新的存储过程为
CREATE PROCEDURE [schema].[StoredProcedure]
@parameter BIGINT NULL
AS EXTERNAL NAME [AssemblyNameFromProjectProperties].[ClassWithProcedure].[Method];
GO
这将允许您将不同的对象放在不同的模式中