Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menghapuskan Aksara Luar Biasa (Seperti Aksara Beraksen) daripada Lajur Varchar Pelayan SQL Menggunakan .NET dan SQL CLR?
Kosongkan aksara khas (beraksen A) dalam lajur varchar SQL Server
Soalan:
Aksara yang tidak dijangka, seperti "aksen A", menyelinap ke dalam lajur varchar jadual. Pelawat yang tidak diingini ini berkemungkinan besar datang daripada suapan CSV, menjadikannya sukar untuk mengesan asal usul mereka. Bagaimanakah kita boleh membersihkan lajur dengan cepat dan menghapuskan aksara yang tidak diingini ini pada peringkat pangkalan data dan dalam C#?
Penyelesaian:
Fungsi ungkapan biasa .NET
Dalam dunia .NET yang luas, kami telah menemui sekutu yang kuat dalam fungsi ekspresi biasa seperti Regex.Replace. Alat berkuasa ini membolehkan kami mengeluarkan kuasa padanan corak dan manipulasi untuk memadam aksara yang tidak diingini dengan mudah:
<code>Regex.Replace(s, @"[^\u0000-\u007F]", string.Empty);</code>
Fungsi SQL CLR
Malangnya, SQL Server tidak mempunyai sokongan asli untuk ungkapan biasa, tetapi fungsi SQL CLR boleh merapatkan jurang ini. Melalui penyepaduan .NET dan SQL Server, kami boleh menggunakan fungsi berkuasa fungsi .NET dalam pernyataan T-SQL.
Panduan langkah demi langkah untuk mencipta fungsi SQL CLR:
<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>
Tunjukkan kuasa ciptaan anda dengan membina projek. Pergi ke kuil SQL Server Management Studio dan bimbingnya ke laluan ke pangkalan data. Berbekalkan pengetahuan ini, arahan berikut akan mencipta laluan ke StackOverflow.dll untuk anda:
<code> CREATE ASSEMBLY [StackOverflow] FROM 'C:\Users\gotqn\Desktop\StackOverflow\StackOverflow\bin\Debug\StackOverflow.dll';</code>
Buat fungsi 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>
Lepaskan keajaiban
Fungsi SQL CLR anda sedia memberi anda akses terus kepada fungsi ekspresi biasa .NET:
<code>SELECT [dbo].[StackOverflowRegexReplace] ('Hello Kitty Essential Accessory Kit', '[^\u0000-\u007F]', '') // Hello Kitty Essential Accessory Kit</code>
Dengan kuasa baharu ini, anda boleh membersihkan aksara yang tidak diingini dengan mudah daripada lajur varchar SQL Server, memastikan ketulenan data anda.
Atas ialah kandungan terperinci Bagaimana untuk Menghapuskan Aksara Luar Biasa (Seperti Aksara Beraksen) daripada Lajur Varchar Pelayan SQL Menggunakan .NET dan SQL CLR?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!