我有一个调用CLR的存储过程并返回一个表。目前,它接受一个字符串,但我想更新它以接受多个,可能在数组或其他东西。
目前,C#功能如下:
public static IEnumerable ParseData(System.String data){ ... }
尝试将参数更改为string[]
,System.String[]
,IEnumerable
和ArrayList
都已失败。当尝试使用其中一个进行构建时,它会将generated.sql文件更改为
CREATE FUNCTION [dbo].[ParseData] (@data /* Error: Unsupported type. */)
如果它很重要,我的目的是能够在SQL中调用我的函数:
SELECT * FROM clr_parseData((SELECT TOP 10 value FROM table))
答案 0 :(得分:1)
根据您的注释,您可以使用具有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