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



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

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

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

尝试将参数更改为 string[]System.String[]IEnumerableArrayList 都失败了。 当尝试使用其中一个进行构建时,它会将生成的文件.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

在这里,表值构造函数只是我生成一组数据的简短方法。SQL 会将您的函数应用于集合中的每个值并生成一个数据集。假设dbo。ParseData 做一些简单的事情,比如"解析一个 CSV"(这就是它在我的示例中要做的事情!),前面的查询将生成一个数据集,例如

foo,bar foo
foo,bar bar
bar,baz bar
bar,baz baz

最新更新