在 CLR 函数中接受多个字符串

Accepting multiple strings in CLR function

我有一个调用 CLR 和 returns table 的存储过程。目前,它接受单个字符串,但我想更新它以接受多个字符串,也许在数组或其他东西中。

目前,C# 函数如下所示:

public static IEnumerable ParseData(System.String data){ ... }

试图将参数更改为 string[]System.String[]IEnumerableArrayList 都失败了。当尝试使用其中之一构建时,它会将 generated.sql 文件更改为

CREATE FUNCTION [dbo].[ParseData] (@data /* Error: Unsupported type. */)

以防万一,我要做的是能够像这样在 SQL 中调用我的函数:

SELECT * FROM clr_parseData((SELECT TOP 10 value FROM table))

根据您的评论,您可以使用具有 System.String 签名(单数,而非数组)的现有函数。你会这样做:

select *
from (
    values 
        ('foo,bar'),
        ('bar,baz')
) as a(v)
cross apply dbo.ParseData(a.v) as p

这里,table-valued构造函数只是作为我生成一组数据的捷径。 SQL 将对集合中的每个值应用您的函数并生成一个数据集。假设 dbo.ParseData 做了一些像 "parse a CSV" 这样简单的事情(这就是它在我的例子中所做的!),前面的查询将产生一个像

这样的数据集
foo,bar foo
foo,bar bar
bar,baz bar
bar,baz baz