在 SQL Server 脚本中调用 .NET 方法

Sky*_*Sky 5 sql-server ssis sql-server-2008-r2 sql-clr

在数据迁移过程中,我需要在写入目标表之前转换来自源系统的一些列值。

我已经获得了一个 Csharp 代码,它读取一个字符串并进行转换(这是一个复杂的字符串操作),然后返回转换后的字符串。

将此代码插入数据迁移 SQL 脚本的最佳方法是什么?我对 CSahrp 编程知之甚少,在研究了不同的站点后,发现这可以通过在 SSIS 包中添加脚本组件或将 .net 代码包装在可从 SQL Server 调用的 CLR 函数中来完成。

由于我的脚本不是 SSIS 包的一部分,我的偏好是定义一个 CLR 函数,但是可以吗?每个选项的优缺点是什么?

你还认为这个目标可以使用另一种更容易实现和维护的技术来实现吗?

如果你知道一个很好的链接,它会一步一步地向我展示这个过程,请与我分享:)

谢谢你。

Jon*_*gel 5

鉴于您当前的迁移脚本只是一个脚本,这将是 CLR 程序集和使用 SSIS 之间的艰难调用。

CLR 组装:

  • 必须安装到数据库中(程序集二进制文件和公开的包装方法)。
  • 需要在 Visual Studio 中设置外部项目,您可能不太熟悉。
  • 很容易集成到您现有的脚本中。
  • 调试可能有点复杂,因为您必须在本地(即在服务器上)调试、设置远程调试或设置综合测试套件。由于不同的原因,所有这些都可能存在问题。(注:建立一个测试套件是一个好主意,但如果时间是一个因素,你已经收到的代码测试块,这是很多安全跳过它在这种情况下比,如果你转换的代码,以T-SQL , 例如。)

SSIS 脚本组件:

  • 意味着运行一个完全独立的进程来进行计算。
  • 与单独的程序集相比,您必须提供所有样板代码,这比使用单独的程序集要容易得多。使用 SSIS,您所做的几乎就是填写所需的方法体。
  • BIDS 是 x86,不能调试 x64 脚本,所以有一些荒谬之处。(请参阅此处以获取快速修复。)不过,这将允许您在本地(在您的工作站上)进行调试,这是一个优势。

虽然我还没有测试过,但我会大胆地说这两种方法的性能应该相似。如果性能是一个大问题,请同时设置场景和比较测试。事实上,您可能只想为了练习而设置两者,这样您就可以看到自己的一些差异和相似之处,这比阅读它更有趣和有趣(好吧,至少我是这么认为的)。

第三种选择是将流程完全转移到 SSIS,这更适合迁移/ETL 类型的任务。这可能可行,也可能不可行。您不一定需要重新调整整个过程,因为您当然可以执行任意脚本。

最后,另一种选择是将代码转换为 T-SQL。然而,根据复杂性,这可能是一个相当大的挑战。当然,有些操作任务更适合使用合适的编程语言/框架,如 .NET。如果没有看到代码本身,就不可能说它是否值得尝试。正如我之前提到的,在这种情况下,您肯定需要开发一个全面的测试套件。

就我个人而言,我可能会创建一个 CLR 程序集,因为我在编程方面很擅长,这将是集成代码最快、侵入性最小的方式。但那是我,我还没有看到代码,所以它可能不是您和您的环境的最佳解决方案。