在 CLR 函数中接受多个字符串
Accepting multiple strings in CLR function
我有一个调用 CLR 和 returns table 的存储过程。目前,它接受单个字符串,但我想更新它以接受多个字符串,也许在数组或其他东西中。
目前,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))
根据您的评论,您可以使用具有 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
我有一个调用 CLR 和 returns table 的存储过程。目前,它接受单个字符串,但我想更新它以接受多个字符串,也许在数组或其他东西中。
目前,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))
根据您的评论,您可以使用具有 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