如何访问外部DLL的静态方法,在SQL Server中包含输出参数

时间:2014-01-29 11:16:18

标签: sql-server dll clr sqlclr output-parameter

我知道如何在SQL Server中加载CLR DLL并访问其静态方法,这些方法不会在方法签名中包含输出参数,但我无法实现的是如何使用具有输出参数的方法。

例如,在SQL服务器中访问Math.dll的阶乘方法是非常明智的:

CREATE ASSEMBLY MathAsm FROM 'C:\Programming\c#\SQLCLRIntegrationExample\assemblies\Math.dll'
    WITH PERMISSION_SET = EXTERNAL_ACCESS;
Go

CREATE FUNCTION Factorial(@x FLOAT)
    RETURNS FLOAT
    EXTERNAL NAME MathAsm.Math.Factorial;
Go

但是如果方法的签名是这样的话:

public static int GetInfo(int[] inputParams, out int[] outputParams)

提前致谢

1 个答案:

答案 0 :(得分:1)

方法的签名有限制。你读过这个:

http://technet.microsoft.com/en-us/library/ms131092.aspx

可以有OUT参数,但是int [] out-upss。 另请注意,只有SP可以有输出参数。

因此,要访问此类方法,您需要编写函数,如下所示:

public SqlInt GetInfo(SqlXml inputParamsXml, out SqlXml  ouputParamsXml)
{
   var inputParams = MyXmlToArrayFunc(inputParamsXml);
   int[] outputParams;
   var r= YourModule.GetInfo(inputParams, out outputParams);
   ouputParamsXml = MyArrayToXmlFunc(outputParams);
   return new SqlInt(r);
}