ホームページ >バックエンド開発 >C++ >.NET と SQL CLR を使用して SQL Server の Varchar 列から異常な文字 (アクセント記号付き文字など) を削除する方法

.NET と SQL CLR を使用して SQL Server の Varchar 列から異常な文字 (アクセント記号付き文字など) を削除する方法

DDD
DDDオリジナル
2025-01-11 06:50:42711ブラウズ

How to Eliminate Unusual Characters (Like Accented Characters) from a SQL Server Varchar Column Using .NET and SQL CLR?

SQL Server の varchar 列の特殊文字 (アクセント付き A) を消去します

質問:

「アクセント付き A」などの予期しない文字がテーブルの varchar 列に忍び込んでいます。これらの望ましくない訪問者は CSV フィードから来ている可能性が高いため、その起源を追跡することが困難になります。列を迅速にクリーンアップして、データベース レベルおよび C# でこれらの不要な文字を削除するにはどうすればよいでしょうか?

解決策:

.NET 正規表現関数

.NET の広大な世界では、Regex.Replace のような正規表現関数に強力な味方が見つかりました。この強力なツールを使用すると、パターン マッチングと操作の力を解放して、不要な文字を簡単に消去できます:

<code>Regex.Replace(s, @"[^\u0000-\u007F]", string.Empty);</code>

SQL CLR 関数

残念ながら、SQL Server には正規表現のネイティブ サポートがありませんが、SQL CLR 関数はこのギャップを埋めることができます。 .NET と SQL Server の統合により、.NET 関数の強力な機能を T-SQL ステートメントで使用できます。

SQL CLR 関数を作成するためのステップバイステップ ガイド:

  1. Visual Studio を呼び出し、クラス ライブラリ プロジェクトを呼び出します。
  2. プロジェクトに「StackOverflow」という名前を付け、次のコードをそこに挿入します。
<code>// .NET正则表达式在SQL CLR函数中

using Microsoft.SqlServer.Server;
using System;
using System.Collections.Generic;
using System.Data.SqlTypes;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;

public class StackOverflow
{
    [SqlFunction(DataAccess = DataAccessKind.None, IsDeterministic = true, Name = "RegexReplace")]
    public static SqlString Replace(SqlString sqlInput, SqlString sqlPattern, SqlString sqlReplacement)
    {
        string input = (sqlInput.IsNull) ? string.Empty : sqlInput.Value;
        string pattern = (sqlPattern.IsNull) ? string.Empty : sqlPattern.Value;
        string replacement = (sqlReplacement.IsNull) ? string.Empty : sqlReplacement.Value;
        return new SqlString(Regex.Replace(input, pattern, replacement));
    }
}</code>
  1. プロジェクトを構築して、あなたの創造力を示してください。 SQL Server Management Studio の神殿に入り、データベースへのパスに誘導します。この知識をもとに、次のコマンドを実行すると StackOverflow.dll へのパスが作成されます。

    <code> CREATE ASSEMBLY [StackOverflow] FROM 'C:\Users\gotqn\Desktop\StackOverflow\StackOverflow\bin\Debug\StackOverflow.dll';</code>
  2. SQL CLR 関数の作成:

    <code> CREATE FUNCTION [dbo].[StackOverflowRegexReplace] (@input NVARCHAR(MAX),@pattern NVARCHAR(MAX), @replacement NVARCHAR(MAX))
     RETURNS NVARCHAR(4000)
     AS EXTERNAL NAME [StackOverflow].[StackOverflow].[Replace]
     GO</code>

魔法を解き放て

SQL CLR 関数を使用して、.NET 正規表現関数に直接アクセスできるようになりました:

<code>SELECT [dbo].[StackOverflowRegexReplace] ('Hello Kitty Essential Accessory Kit', '[^\u0000-\u007F]', '')

// Hello Kitty Essential Accessory Kit</code>

この新しく発見された機能を使用すると、SQL Server の varchar 列から不要な文字を簡単に削除し、データの純度を確保できます。

以上が.NET と SQL CLR を使用して SQL Server の Varchar 列から異常な文字 (アクセント記号付き文字など) を削除する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。