Tavolo di ritorno con CLR

Voglio scrivere una procedura CLR che prende un testo e restituisce una tabella con tutte le parole in questo testo. Ma non riesco a capire come restituire un tavolo. Potresti dirmi per favore?

[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? } 

Grazie per l’aiuto.

AGGIORNATO: Devo farlo per sql-2005

È ansible restituire qualsiasi elenco che implementa un object IEnumerable. Dai un’occhiata a questo .

Ecco un esempio completo. Mi sono stancato di cercarlo da solo e anche se questa risposta mi è stata data, ho pensato di pubblicarlo solo per mantenere un nuovo riferimento online.

 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; } } }; 

Questa è una nuova area di SQL Server, dovresti consultare questo articolo. Che mostra la syntax di una funzione valutata a livello di tabella – questo è ciò che si desidera creare.