我有一个调用CLR并返回表的存储过程。 目前,它接受单个字符串,但我想更新它以接受多个字符串,也许在数组或其他东西中。
目前,C# 函数如下所示:
public static IEnumerable ParseData(System.String data){ ... }
尝试将参数更改为 string[]
、 System.String[]
、 IEnumerable
和 ArrayList
都失败了。 当尝试使用其中一个进行构建时,它会将生成的文件.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