C # строковая функция для скалярной функции T-SQL - PullRequest
0 голосов
/ 13 июля 2011

Я хочу использовать функцию c #, которая изменяет строку для html действительного имени URL. Функция как ниже:

public static string HTMLValidName(string input)
{
    string[] pattern = new string[] { "[^a-zA-Z0-9-]", "-+" };
    string[] replacements = new string[] { "-", "-" };
    input = input.Trim();
    input = input.Replace("Ç", "C");
    input = input.Replace("ç", "c");
    input = input.Replace("Ğ", "G");
    input = input.Replace("ğ", "g");
    input = input.Replace("Ü", "U");
    input = input.Replace("ü", "u");
    input = input.Replace("Ş", "S");
    input = input.Replace("ş", "s");
    input = input.Replace("İ", "I");
    input = input.Replace("ı", "i");
    input = input.Replace("Ö", "O");
    input = input.Replace("ö", "o");
    for (int i = 0; i <= pattern.Length - 1; i++)
        input = Regex.Replace(input, pattern[i], replacements[i]);

    while(input.Contains("--"))
    {
        input = input.Replace("--", "-");
    }

    if (input[0] == '-') input = input.Substring(1, input.Length - 1);

    return input;
}

Мне нужно использовать эту функцию для результатов SQL. Например, SELECT ID FROM Категории, ГДЕ HTMLValidName (Title) = @ URLTitle

Как я могу преобразовать это в функцию T-SQL или я могу создать эту функцию в c #?

Ответы [ 2 ]

3 голосов
/ 13 июля 2011
CREATE FUNCTION dbo.HtmlValidName(@input nvarchar(max))
    RETURNS nvarchar(max)
AS
BEGIN
    DECLARE @i int
    DECLARE @match int

    -- Remove diacritical marks
    SET @input = CAST(@input AS varchar(max)) COLLATE Japanese_BIN

    -- Replace non-alphanumerics with dash
    SET @i = 0
    WHILE @i < 1000000
    BEGIN
        SET @match = PATINDEX('%[^a-zA-Z0-9-]%', @input)
        IF @match = 0 BREAK
        SET @input = STUFF(@input, @match, 1, '-')
        SET @i = @i + 1
    END

    RETURN @input
END
2 голосов
/ 13 июля 2011

Вы можете создать управляемую пользовательскую функцию, которая запускается на вашем SQL-сервере и выглядит снаружи как обычная пользовательская функция.См. здесь для получения дополнительной информации.

...