Csharp/C#教程:CLR在SQL Server内部组装C#分享


CLR在SQL Server内部组装C#

我在想这样的事情。

-- I have a stored proc that gets a table, let it be myStoredProcTable --FIST ENABLE DATA ACCESS EXEC sp_serveroption 'TheServerName', 'DATA ACCESS', TRUE --main.sql calls yStoredProcTable.sql and the calls functionAssembly SELECT * INTO #tmpTable FROM OPENQUERY(SERVERNAME, 'EXEC test.dbo.myStoredProcTable 1') -- pass the table to assembly -- how would i pass the table to assembly code?, Is this POSSIBLE? EXEC functionAssembly #tmpTable 

– – – – – – – – – – – – – – – – – – – – – 编辑

@faester回答: – 我怎么能在代码中使用XML,我建议使用numberTOstring东西,但我想这里的XML选项最好……

再一次,我真的这样做,即使不是最好的选择……

是的,您可以注册程序集,但由于性能问题,这很少是一个好主意。

但是,如果您对标量值进行复杂的数值计算或类似操作,它可以为您提供很大的灵活性。 但问题仍然是SQL本身设置为C#不是,所以你很容易遇到不匹配。

您还应该知道,您只能在静态类上导入静态成员。

但是一个例子这个类 – 故意没有命名空间,因为它似乎无法在命名空间中导入类。

  public static class Math { [Microsoft.SqlServer.Server.SqlFunction] public static int Add(int a, int b) { return a + b; } [Microsoft.SqlServer.Server.SqlProcedure] public static void Void(int a, int b) { } } 

需要一些SQL才能使服务器准备就绪,您可能需要成为管理员。

  EXEC SP_CONFIGURE 'clr enabled', 1 GO RECONFIGURE GO -- CONSIDER: DROP ASSEMBLY SqlClr GO CREATE ASSEMBLY SqlClr FROM 'pathtoassembly' WITH PERMISSION_SET = SAFE; GO SELECT * FROM sys.assemblies GO CREATE FUNCTION [MathAdd] (@a int, @b int) RETURNS INT AS EXTERNAL NAME [SqlClr].Math.[Add] GO CREATE PROCEDURE [Void] @a INT, @b INT AS EXTERNAL NAME [SqlClr].Math.[Void] GO SELECT dbo.MathAdd (1, 2) EXEC void 1, 2 

再说:你真的应该对自己需要这个,这很少是个好主意! (我曾经使用它一次进行电子邮件validation,使得dns查找等,但这是在一个所有业务逻辑都是用SQL编写的系统上。这很糟糕!)

一些有用的参考:

https://msdn.microsoft.com/en-us/library/ms189524.aspx

https://www.codeproject.com/KB/database/CLR_in_Sql_Server_2005.aspx

使用SQL CLR执行您描述的确切function。

这是可能的 。 (但阅读评论)。

上述就是C#学习教程:CLR在SQL Server内部组装C#分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1015363.html

(0)
上一篇 2021年12月30日
下一篇 2021年12月30日

精彩推荐