2011-07-13 22 views
0

我想使用修改html有效url名稱的字符串的c#函數。該函數如下所示:對T-SQL標量函數的C#字符串函數

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 Categories WHERE HTMLValidName(Title)= @ URLTitle

如何將其轉換爲T-SQL函數或可以在c#中創建此函數?

回答

2

您可以創建一個託管用戶定義函數,該函數在您的SQL服務器中運行,並從外部看起來像普通的用戶定義函數。有關更多信息,請參閱here

3
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