2015-05-12 34 views
-2

我有一個存儲過程,它接受一個字符串並提取以'@'開頭的子字符串。我決定爲此使用C#DLL並使用SQL程序集訪問此DLL。因此,我在C#中開發了以下方法:如何將程序集中的數組/列表返回到SQL Server中的存儲過程?

[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類型。

+0

..什麼是match'的'執行這一行'IDs.Add(match.Value.Replace( 「@」, 「」)),前值;'如果'match contains @'然後在IDs.Add(match.Value.Replace(「@」,「」))上面添加一行,並執行match = match.Replace(「@」,「」)''然後做'IDs.Add(match)' – MethodMan

+0

@MethodMan這個方法工作正常,但問題是返回到SQL存儲過程時,我的方法的返回類型應該是什麼。正則表達式代碼不是我的問題。 –

+0

它肯定會很高興看到存儲過程的方式,我們可以確定它應該是一個DataTable,IEnumerable,字符串,詮釋等。 – MethodMan

回答

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; 
} 
當你通過代碼使用調試器
相關問題