如何 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;
}
我有一个存储过程,它接受一个字符串并提取以“@”开头的子字符串。我决定为此使用 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;
}