我的解决方案中有一个 SQL Server 项目(VS 2012/.Net 4.5)。该项目的唯一原因是我需要创建一个可以从我的一些存储过程中调用的 CLR 函数。它工作得很好,生活也很棒。但是,我必须手动发布 SQL 项目才能将该功能放入我的数据库中。
有没有办法,理想情况下,当我播种数据库(这是一个 Entity Framework 5.0 Code-First 数据库)以编程方式执行某种执行命令或发布我的 CLR 函数时,我没有这个额外的手动步骤?
TIA
我的解决方案中有一个 SQL Server 项目(VS 2012/.Net 4.5)。该项目的唯一原因是我需要创建一个可以从我的一些存储过程中调用的 CLR 函数。它工作得很好,生活也很棒。但是,我必须手动发布 SQL 项目才能将该功能放入我的数据库中。
有没有办法,理想情况下,当我播种数据库(这是一个 Entity Framework 5.0 Code-First 数据库)以编程方式执行某种执行命令或发布我的 CLR 函数时,我没有这个额外的手动步骤?
TIA
是的,您只需要传递正确的 SQL。这是我的一个 SQL 脚本片段,它将正则表达式支持添加为存储过程,您可以根据需要对其进行修改。
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[RegexMatch]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
DROP FUNCTION [dbo].[RegexMatch]
GO
IF EXISTS (SELECT * FROM sys.assemblies asms WHERE asms.name = N'Msdn.SqlRegex')
DROP ASSEMBLY [Msdn.SqlRegex]
GO
--------------------------------
--Create the clr program to do the regex
--------------------------------
CREATE ASSEMBLY [Msdn.SqlRegex]
AUTHORIZATION [dbo]
FROM 0x4D5A90000300000004000000F(SNIP)
WITH PERMISSION_SET = SAFE
GO
ALTER ASSEMBLY [Msdn.SqlRegex]
ADD FILE FROM 0xEFBBBF7573696E672053797374656D(SNIP)
AS N'Properties\AssemblyInfo.cs'
GO
ALTER ASSEMBLY [Msdn.SqlRegex]
ADD FILE FROM 0x7573696E672053797374(SNIP)
AS N'RegexMatch.cs'
GO
CREATE FUNCTION [dbo].[RegexMatch](@input [nvarchar](max), @pattern [nvarchar](4000))
RETURNS [bit] WITH EXECUTE AS CALLER
AS
EXTERNAL NAME [Msdn.SqlRegex].[UserDefinedFunctions].[RegexMatch]
GO
要获取三字节数组,只需手动添加一次程序集,然后进入 Sql Server Management Studio 并Programability->Assemblies
右键单击您的程序集,然后Script Assembly as->Create To->New Query Editor Window
将其用作源。
可以使用 T-SQL 创建、删除和更改程序集: