我正在开发一个基于 Linq 的 CLR 存储过程,用于一些复杂的过滤和操作,否则如果在更“传统”的存储过程中实现,则需要大量混乱且性能较差的 T-SQL 代码。
这工作得很好,但我找不到如何在部署阶段设置此存储过程的架构,以便更好地组织和分离模块中的数据库对象。
有任何想法吗?
提前谢谢了。
UPDATE:在 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
希望有帮助!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)