0

htmlの有効なURL名の文字列を変更するc#関数を使用します。この関数は以下のようになります。C#文字列関数からT-SQLスカラー関数

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カテゴリのように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