填充行方法是否保留元素的顺序(SQL CLR函数)?

时间:2015-03-19 12:51:07

标签: c# regex tsql sql-server-2012 sqlclr

我有以下C#功能:

[SqlFunction(FillRowMethodName = "FillRowForSplit")]
public static IEnumerable Split(SqlString sqlInput, SqlString sqlPattern)
{
    string[] substrings;

    if (sqlInput.IsNull || sqlPattern.IsNull)
    {
        substrings = new string[0];
    }
    else
    {
        substrings = Regex.Split(sqlInput.Value, sqlPattern.Value);
    }

    return substrings;
}

public static void FillRowForSplit(Object value, out SqlString sqlValue)
{
    sqlValue = new SqlString(value.ToString());
}

通常通过正则表达式拆分值。以下是T-SQL定义:

CREATE FUNCTION [RegexSplit](@input NVARCHAR(MAX), @pattern NVARCHAR(MAX))
RETURNS TABLE ([value] NVARCHAR(MAX))
AS 
EXTERNAL NAME [Utils].[RegularExpression].[Split];
GO

这是一个有效的例子:

SELECT [value]
FROM [RegexSplit]('10527,!!10528,!!10529,!!10530,!!10526', ',!!');

enter image description here

问题是“我能确定保留单独元素的顺序吗?”或者我应该重写C#函数,以便将每个元素与索引匹配并返回索引。

1 个答案:

答案 0 :(得分:0)

保留单独元素的顺序,因为即使为Regex指定了RightToLeft选项,Regex也会依次处理字符。