2010-11-30 59 views

回答

4

您可以从一个架构使用更改存储过程到另一个

ALTER SCHEMA Org TRANSFER dbo.spUdpateCompany 
1

它似乎是安全相关的,并通过设计完成。 http://support.microsoft.com/kb/918346

+2

我说的是,当你用鼠标右键单击在Visual一个SQL CLR项目发生了什么Studio并点击“部署”。它将您的程序集放入SQL Server中,然后生成调用装配方法的T-SQL包装函数和存储过程。据我所知,这些包装总是进入dbo模式。为了组织的目的,我想将它们放在一个单独的模式中。到目前为止,我所管理的最好的方法是手动编辑项目中的部署前和部署后的SQL脚本,以删除并重新创建我希望它们的Schema中的项目,但这是每个项目的手动过程。 – 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 

第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 
+0

这整个事情可以简化为一行:ALTER SCHEMA Org TRANSFER dbo.spUdpateCompany。任何与该DLL关联的对象在部署之前都必须放弃,因为它们依赖于该DLL。 – Griffin 2012-03-14 00:36:47

+0

我原本希望在Visuatl Studio中会有一个配置Schema的地方,但我从未找到过。这是我们采取的方法...前后部署脚本。 – 2012-06-27 18:42:28

0

应该提到的是,这个问题是过时,因为它有一个“默认模式”配置字段中的Visual Studio 2012的生成的T-SQL包装器对象。这也被“更新”一节中指出,在下面的答案顶部;-)

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