sql-server – 创建CLR表值函数

我试图创建一个简单的表值CLR函数,它以逗号分隔的字符串作为参数,将其拆分并将其作为多行返回

在几个在线教程之后,我最终得到了:

[SqlFunction(FillRowMethodName = "FillRow",TableDefinition="val nvarchar(1000)")]
public static IEnumerable SqlFunction1(SqlString val)
{
    string[] splitStr = val.Value.Split(',');
    return splitStr;
}
private static void FillRow(Object obj, out SqlString str)
{
    object[] row = (object[])obj;
    str = (string)row[0];
}

但是,使用执行它

select * from dbo.SqlFunction1('1,2,3,4,5')

返回以下错误

Msg 6260, Level 16, State 1, Line 1
An error occurred while getting new row from user defined Table Valued Function : 
System.InvalidCastException: Unable to cast object of type 'System.String' to type 'System.Object[]'.
System.InvalidCastException: 
   at UserDefinedFunctions.FillRow(Object obj, SqlString& str)
.
最佳答案
您正在使用字符串引用并尝试将其强制转换为对象数组,这会导致InvalidCastException.

您的SqlFunction1方法返回一个字符串数组,因此将使用字符串引用调用FillRow方法.将对象引用转换回字符串,然后从中创建一个SqlString值:

private static void FillRow(Object obj, out SqlString str) {
  string row = (string)obj;
  str = new SqlString(row);
}

转载注明原文:sql-server – 创建CLR表值函数 - 代码日志