Listing 2: Definition of Split Function in C#
using System;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.Collections;
using System.Collections.Generic;
public partial class SplitClass
{
// Struct used in string split functions
struct row_item
{
public string item;
public int pos;
}
// Split array of strings and return a table
// FillRowMethodName = "ArrSplitFillRow"
[SqlFunction(FillRowMethodName = "ArrSplitFillRow",
DataAccess = DataAccessKind.None,
TableDefinition = "pos INT, element NVARCHAR(MAX)")]
public static IEnumerable Split(SqlString inpStr,
SqlString charSeparator)
{
string locStr;
string\[] splitStr;
char\[] locSeparator = new char\[1];
locSeparator\[0] = (char)charSeparator.Value\[0];
if (inpStr.IsNull)
locStr = "";
else
locStr = inpStr.Value;
splitStr = locStr.Split(locSeparator,
StringSplitOptions.RemoveEmptyEntries);
//locStr.Split(charSeparator.ToString()[0]);
List<row_item> SplitString = new List<row_item>();
int i = 1;
foreach (string s in splitStr)
{
row_item r = new row_item();
r.item = s;
r.pos = i;
SplitString.Add(r);
++i;
}
return SplitString;
}
public static void ArrSplitFillRow(
Object obj, out int pos, out string item)
{
pos = ((row_item)obj).pos;
item = ((row_item)obj).item;
}
}