首页 > 解决方案 > 函数与存储过程作为外部名称属性

问题描述

我正在尝试将现有的 .dll 文件映射到 SQL Server 中,为此我创建了一个程序集,然后我使用了带关键字的create procedure语法。external

我们可以使用创建函数脚本来实现相同的目的吗?如果没有,请告诉我何时使用函数或存储过程来做同样的事情。

create function ConvertToText
    (@Resume varbinary(max))
return varchar(8000)
as external name Conversions.Sqlconversions.ConvertToText


create procedure ConvertToText
    (@Resume  varbinary(max))
as external name Conversions.Sqlconversions.ConvertToText

它是否仅取决于是否有相同的返回值这一事实?

标签: sql-serverfunctionstored-proceduresdll

解决方案


这取决于您如何修饰 CLR 程序集中的方法。

您将create procedure在映射存储过程时使用,例如:

  [Microsoft.SqlServer.Server.SqlProcedure]  
  public static int PriceSum(out SqlInt32 value)  
  {
    //...
  }

您将create function在映射用户定义的函数时使用,例如:

  //Scalar User-Defined Function
  [Microsoft.SqlServer.Server.SqlFunction(DataAccess = DataAccessKind.Read)]
  public static int ReturnOrderCount()
  {
    return 1 + 47;
  }

  //Table-Valued User-Defined Function
  [Microsoft.SqlServer.Server.SqlFunction(FillRowMethodName = "FillRow")]
  public static IEnumerable FindInvalidEmails(SqlDateTime modifiedSince)
  {
    return Something_Something_IEnumerable;
  }

参考:


推荐阅读