Sql server CLR存储过程:如何设置架构/所有者?

Sql server CLR存储过程:如何设置架构/所有者?,sql-server,stored-procedures,sql-server-2005,sqlclr,sql-server-data-tools,Sql Server,Stored Procedures,Sql Server 2005,Sqlclr,Sql Server Data Tools,我正在为一些复杂的过滤和操作开发一个基于Linq的CLR存储过程,如果在一个更“传统”的存储过程中实现,这将需要大量杂乱且性能差的T-SQL代码 这非常有效,但我找不到如何在部署阶段设置此存储过程的模式,以便更好地组织和分离模块中的数据库对象 有什么想法吗 非常感谢。当您创建引用程序集的过程时,您可以创建由您想要的任何架构拥有的包装。有关如何部署存储过程的演练,请参见。通过将create procedure语句更改为类似以下内容: CREATE SCHEMA foo CREATE PROCED

我正在为一些复杂的过滤和操作开发一个基于Linq的CLR存储过程,如果在一个更“传统”的存储过程中实现,这将需要大量杂乱且性能差的T-SQL代码

这非常有效,但我找不到如何在部署阶段设置此存储过程的模式,以便更好地组织和分离模块中的数据库对象

有什么想法吗


非常感谢。

当您创建引用程序集的过程时,您可以创建由您想要的任何架构拥有的包装。有关如何部署存储过程的演练,请参见。通过将create procedure语句更改为类似以下内容:

CREATE SCHEMA foo

CREATE PROCEDURE foo.hello
AS
EXTERNAL NAME helloworld.HelloWorldProc.HelloWorld

现在,您可以拥有一个属于
foo
架构的过程。

更新:在Visual Studio 2012中,现在可以通过“SQL Server数据库项目”的“项目属性”窗口来完成。相关属性是“项目设置”选项卡上的“默认架构”。修改此值将修改生成的部署脚本,以将架构名称放在函数、存储过程等前面。。。请确保使用相同的名称将架构对象添加到项目中,否则将出现生成错误


我不知道您使用的是哪个版本的Visual Studio,但在Visual Studio 2010中创建CLR存储过程项目时,该项目包括两个SQL脚本:PreDeploymentScript.SQL和PostDeploymentScript.SQL

我们只是用这些来按我们想要的方式进行复制

在预部署脚本中,我们有如下内容:

-- DROP EXISTING ITEM FROM CURRENT SCHEMA
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[Utilities].[fn_Create_Md5_Hash]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
DROP FUNCTION [Utilities].[fn_Create_Md5_Hash]
GO
然后,在部署后脚本中,我们有:

-- DEPLOYMENT WIZARD RECREATES ITEM IN dbo SCHEMA
-- DROP NEW ITEM FROM dbo SCHEMA
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[fn_Create_Md5_Hash]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
DROP FUNCTION [dbo].[fn_Create_Md5_Hash]
GO

-- RECREATE THE ITEM BACK IN THE SCHEMA YOU WANT
CREATE FUNCTION [Utilities].[fn_Create_Md5_Hash](@source [varbinary](max))
RETURNS [varbinary](8000) WITH EXECUTE AS CALLER
AS 
EXTERNAL NAME [NameSpace].[UserDefinedFunctions].[fn_Create_Md5_Hash]
GO

希望有帮助

非常感谢。我已经找到了那篇文章,我可以把它看作是一种变通方法,但我想知道是否还有其他替代方法不需要包装器或第二个对象。你是否意识到任何可能性,或者这是唯一的实际可能性?再次感谢您的及时响应:)SQL包装器是一个必要的部分。无论如何,您必须这样做-这是部署CLR存储过程的一个组成部分。非常感谢并对延迟表示抱歉,在此期间,我一直在忙于其他事情。我不再直接从VisualStudio部署。相反,我是通过脚本进行部署的,因此,正如您所建议的,我可以通过使用包装器更轻松地指定所需的模式。再次感谢您的帮助。此请求与在Visual Studio/SSDT部署中设置架构相关,从VS 2012起已过时。请参阅以下答案顶部的更新部分: