如何 return 一个 array/list 从程序集到 SQL 服务器中的存储过程?

How to return an array/list from an assembly to a stored procedure in SQL Server?

我有一个存储过程,它接受一个字符串并提取以“@”开头的子字符串。我决定为此使用 C# DLL 并使用 SQL 程序集访问此 DLL。所以,我在 C# 中开发了以下方法:

[Microsoft.SqlServer.Server.SqlFunction]
public static ? GetSubStrings(string text)
{
       List<string> IDs=new List<string>();
       foreach (Match match in Regex.Matches(text, @"(?<!\w)@\w+"))
       {
           try
           {
                IDs.Add(match.Value.Replace("@", ""));
           }
           catch (NullReferenceException) { continue; }
       }
       return IDs;
}

我添加了'?'代替 return 类型登录,因为我不知道此方法应该 return 什么 return 类型?请告诉我解决方案。我找不到任何存储此类数据的 SQL 类型。

为此,您需要将函数设为 Table Valued Function, this will make your function return a table instead of a single result. To do this you need to use the TableDefinition 属性 并将 return 类型设为 IEnumerable.

[Microsoft.SqlServer.Server.SqlFunction(TableDefinition="IDs nvarchar(max)"]
public static IEnumerable GetSubStrings(string text)
{
       List<string> IDs=new List<string>();
       foreach (Match match in Regex.Matches(text, @"(?<!\w)@\w+"))
       {
           try
           {
                IDs.Add(match.Value.Replace("@", ""));
           }
           catch (NullReferenceException) { continue; }
       }
       return IDs;
}