使用CLR返回表

我想编写一个CLR过程,它接受一个文本并返回一个包含本文所有单词的表。 但我无法弄清楚如何返回一张桌子。 你能告诉我吗?

[Microsoft.SqlServer.Server.SqlFunction] public static WhatTypeShouldIWriteHere Function1(SqlString str) { string[] words = Regex.Split(str, @"\W+").Distinct().ToArray(); //how to return a table with one column of words? } 

谢谢您的帮助。

更新:我需要为sql-2005做这件事

您可以返回任何实现IEnumerable的列表。 看看这个 。

这是一个完整的样本。 我厌倦了自己寻找这个,即使这个问题得到了解答,我想我会发布这个只是为了在网上保留一个新的参考。

 using System; using System.Data.SqlTypes; using Microsoft.SqlServer.Server; using System.Text.RegularExpressions; using System.Collections; using System.Collections.Generic; public partial class UserDefinedFunctions { [SqlFunction] public static SqlBoolean RegexPatternMatch(string Input, string Pattern) { return Regex.Match(Input, Pattern).Success ? new SqlBoolean(true) : new SqlBoolean(false); } [SqlFunction] public static SqlString RegexGroupValue(string Input, string Pattern, int GroupNumber) { Match m = Regex.Match(Input, Pattern); SqlString value = m.Success ? m.Groups[GroupNumber].Value : null; return value; } [SqlFunction(DataAccess = DataAccessKind.Read, FillRowMethodName = "FillMatches", TableDefinition = "GroupNumber int, MatchText nvarchar(4000)")] public static IEnumerable RegexGroupValues(string Input, string Pattern) { List GroupCollection = new List(); Match m = Regex.Match(Input, Pattern); if (m.Success) { for (int i = 0; i < m.Groups.Count; i++) { GroupCollection.Add(new RegexMatch(i, m.Groups[i].Value)); } } return GroupCollection; } public static void FillMatches(object Group, out SqlInt32 GroupNumber, out SqlString MatchText) { RegexMatch rm = (RegexMatch)Group; GroupNumber = rm.GroupNumber; MatchText = rm.MatchText; } private class RegexMatch { public SqlInt32 GroupNumber { get; set; } public SqlString MatchText { get; set; } public RegexMatch(SqlInt32 group, SqlString match) { this.GroupNumber = group; this.MatchText = match; } } }; 

这是SQL Server的一个新领域,您应该参考这篇文章。 其中显示了表值函数的语法 – 这就是您要创建的内容。