【发布时间】:2017-05-26 19:23:00
【问题描述】:
我有一个调用 CLR 并返回表的存储过程。目前,它接受一个字符串,但我想更新它以接受多个,可能在一个数组或其他东西中。
目前,C# 函数如下所示:
public static IEnumerable ParseData(System.String data){ ... }
尝试将参数更改为string[]、System.String[]、IEnumerable和ArrayList均失败。当尝试使用其中之一进行构建时,它会将 generate.sql 文件更改为
CREATE FUNCTION [dbo].[ParseData] (@data /* Error: Unsupported type. */)
如果重要的话,我想要的是能够像这样在 SQL 中调用我的函数:
SELECT * FROM clr_parseData((SELECT TOP 10 value FROM table))
【问题讨论】:
-
听起来您正在考虑一个表值参数(您的查询语法完全错误)。但是 CLR 不支持传递整个数据集。您可以传入一个分隔列表,但不能像您尝试的那样传入一个集合。
-
@SeanLange 我有一种感觉,那就是答案。我想我得另辟蹊径了。
-
你的 ParseData 方法是做什么的?也就是说,给定一个数组,它会对该数组中的每个元素做同样的事情吗?如果是这样,听起来它是一个 CLR 函数,根据它是标量函数还是表函数,可以在选择列表或交叉应用中调用(分别)。
-
@BenThul 它根据字符串中的各种事物解析一串数据,为解析出的每一项返回一行。你是对的,如果它可以传递一个数组,它本质上只是循环遍历该数组并在每个字符串上运行相同的函数。
标签: c# sql sql-server clr