Вы можете попробовать это:
CREATE TABLE dbo.Bad_ASCII_Characters (ascii_char CHAR(1) NOT NULL)
DECLARE @i INT
SET @i = 1
WHILE @i <= 255
BEGIN
IF (@i <> 32) AND
(@i NOT BETWEEN 48 AND 57) AND
(@i NOT BETWEEN 65 AND 90) AND
(@i NOT BETWEEN 97 AND 122)
BEGIN
INSERT INTO dbo.Bad_ASCII_Characters (ascii_char) VALUES(CHAR(@i))
END
SET @i = @i + 1
END
DECLARE @row_count INT
SET @row_count = 1
WHILE (@row_count > 0)
BEGIN
UPDATE T
SET my_column = REPLACE(my_column, ascii_char, '')
FROM My_Table T
INNER JOIN dbo.Bad_ASCII_Characters BAC ON
T.my_column LIKE '%' + BAC.ascii_char + '%'
SET @row_count = @@ROWCOUNT
END
Я не проверял, так что, возможно, вам придется немного его настроить. Вы можете генерировать таблицу «на лету» каждый раз или оставить ее там, и если ваши требования немного изменятся (например, вы обнаружите, что некоторые символы будут правильно обрабатываться), тогда вы можете просто изменить данные в таблице.
Цикл WHILE вокруг обновления выполняется в случае, если некоторые столбцы содержат несколько специальных символов. Если ваша таблица очень большая, вы можете увидеть здесь некоторые проблемы с производительностью.