這是查找字符串的示例代碼是否包含特殊字符。你可以試試這個
DECLARE @MyString VARCHAR(100)
SET @MyString = 'abcdef&&&&ybyds'
IF (@MyString LIKE '%[^a-zA-Z0-9]%')
BEGIN
SET @MyString = Replace(@MyString,'&',' ')
PRINT 'Contains "special" characters'
PRINT @MyString
END
ELSE
BEGIN
PRINT 'Does not contain "special" characters'
PRINT @MyString
END
而且你的UPDATE查詢將是這樣的: -
UPDATE [BuildingPros].[utbProfessionals]
SET [ProfessionalName] =
(
CASE
WHEN [ProfessionalName] LIKE '%[^a-zA-Z0-9]%'
THEN Replace(REPLACE(ProfessionalName, SUBSTRING(ProfessionalName, PATINDEX('%[~,@,#,$,%,&,*,^,&,%,*,(,)]%', ProfessionalName), 1),''),'-',' ')
ELSE [ProfessionalName]
END
)
,或者可以創建一個函數來刪除特殊字符函數然後調用它在Update語句。
1)從字符串值中移除特殊字符。 2)除0-9,a-z和A-Z以外的所有字符被刪除,並且3)其餘字符被返回。
create function dbo.RemoveSpecialChars (@s varchar(256)) returns varchar(256)
with schemabinding
begin
if @s is null
return null
declare @s2 varchar(256)
set @s2 = ''
declare @l int
set @l = len(@s)
declare @p int
set @p = 1
while @p <= @l begin
declare @c int
set @c = ascii(substring(@s, @p, 1))
if @c between 48 and 57 or @c between 65 and 90 or @c between 97 and 122
set @s2 = @s2 + char(@c)
set @p = @p + 1
end
if len(@s2) = 0
return null
return @s2
end
然後調用這個函數在更新語句: -
UPDATE [BuildingPros].[utbProfessionals]
SET [ProfessionalName] =
(
CASE
WHEN [ProfessionalName] LIKE '%[^a-zA-Z0-9]%'
THEN (SELECT dbo.RemoveSpecialChars(ProfessionalName))
ELSE [ProfessionalName]
END
)
Refer
我會解決的基本*危險字符不允許*問題(你應說明這一點),而不是改變。數據。如果處理正確,您應該不會遇到問題 –
我會在用戶第一次創建公司名稱和更新其名稱的區域發表該聲明,但現在,我需要修正噓聲。 –
@ AlexK。的觀點是數據庫應該允許用戶想要的任何字符。當您從數據庫中讀取數值時,應該對軟件中的任何「壞字符」進行過濾。 – dg99