【问题标题】:How to return an array/list from an assembly to a stored procedure in SQL Server?如何将数组/列表从程序集返回到 SQL Server 中的存储过程?
【发布时间】:2015-07-23 13:37:43
【问题描述】:

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

我添加了“?”代替返回类型,因为我不知道这个方法应该返回什么返回类型?请告诉我解决方案。我找不到任何存储此类数据的 SQL 类型。

【问题讨论】:

  • 当您使用调试器单步执行代码时。在执行此行之前match 的值是什么IDs.Add(match.Value.Replace("@", "")); 如果match contains @ 然后在IDs.Add(match.Value.Replace("@", "")); 上方添加一行并执行@987654326 @然后做IDs.Add(match)
  • @MethodMan 该方法工作正常,但问题是当返回到 SQL 存储过程时,我的方法的返回类型应该是什么。正则表达式代码不是我的问题。
  • 很高兴看到存储过程,我们可以确定它是否应该是 DataTable、IEnumerable、String、Int. 等......

标签: c# sql-server stored-procedures .net-assembly sqldatatypes


【解决方案1】:

为此,您需要将您的函数设为Table Valued Function,这将使您的函数返回一个表而不是单个结果。为此,您需要使用 TableDefinition 属性并将返回类型设为 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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-03
    • 2014-11-06
    相关资源
    最近更新 更多