【发布时间】:2011-12-13 01:29:16
【问题描述】:
根据this 线程,F# Core 必须经过 SQLCLR 批准才能将程序集标记为SAFE。这是计划好的吗?还能做到吗?
【问题讨论】:
根据this 线程,F# Core 必须经过 SQLCLR 批准才能将程序集标记为SAFE。这是计划好的吗?还能做到吗?
【问题讨论】:
我相信这是可以做到的。但是,F# 核心库是 Microsoft 的唯一财产。这意味着您不能修改其代码并重新编译它以匹配并遵守 SQLCLR SAFE。我建议您使用 Microsoft 的连接网站向 Microsoft 添加建议。
Microsoft connect 位于:http://connect.microsoft.com(您必须在 live.com 或 hotmail.com 上注册并拥有电子邮件帐户,然后才能注册)。
要手动添加您的 .NET DLL 并将其集成到 SQL Server,您可以这样做:
在此示例中,必须首先编译 F# 代码中的 DLL。我从 MSDN Library 链接采取这一步: http://msdn.microsoft.com/en-us/library/ms254956(v=vs.80).aspx
不要忘记将 PERMISSION_SET = SAFE 添加到 CREATE ASSEMBLY 命令中。
这是我从上面链接中引用的步骤:
在 SQL Server 中加载并运行“Hello World”存储过程
一旦示例程序成功 编译,你可以在SQL中测试它 服务器。为此,请打开 SQL Server Management Studio 并创建一个新的 查询,连接到合适的测试 数据库(例如, AdventureWorks 示例数据库)。我们 将需要创建程序集,所以我们 可以访问存储过程。为了 这个例子,我们假设你 已经创建了 helloworld.dll C:\ 目录中的程序集。添加 在 Transact-SQL 语句之后 您的查询。
CREATE ASSEMBLY helloworld from 'c:\helloworld.dll' WITH PERMISSION_SET = SAFE创建程序集后, 我们现在可以访问我们的 HelloWorld 使用创建过程的方法 陈述。我们将调用我们存储的 程序“你好”:
CREATE PROCEDURE hello AS EXTERNAL NAME helloworld.HelloWorldProc.HelloWorld创建程序后, 它可以像正常一样运行 写的存储过程 事务处理 SQL。执行以下 命令:
EXEC hello这应该会导致以下结果 SQL Server 管理中的输出 Studio 消息窗口。
Hello world!
编辑:根据下面的评论,他对 F# 现在开源的看法是正确的!您可以修改和重新编译它以满足您的需要。
编辑:添加有关如何将 DLL 集成到 SQL Server CLR 集成的更多详细指南。
【讨论】:
使用 fsc(又名 F# 编译器)的 --standalone 标志是一个很讨厌的技巧。这甚至可以添加到项目设置中,并嵌入到 F# 运行时库的输出工件中(以及所有其他被视为可嵌入的依赖项)。我相信到那时你应该能够通过将你的程序集标记为 SQLCLR 安全来做你想做的事情。
【讨论】:
SAFE。它所做的只是将不安全的代码移动到您的自定义程序集中。