SQL Server - Supprimer tous les non-caractères ASCII imprimables

Nous avons récemment migré à partir de SQL Server 2012 SQL Server 2014 et tous nos FOR XML code commencé à lancer des erreurs au sujet de la non-caractères ASCII imprimables.
J'ai écrit ce horrible fonction pour supprimer des caractères ASCII imprimables comme une solution rapide. Je veux le remplacer par quelque chose de plus propre. Est-il un moyen de faire cela?

ALTER FUNCTION [dbo].[remove_non_printable_chars]
(@input_string nvarchar(max))
RETURNS nvarchar(max)
BEGIN
RETURN
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
REPLACE(REPLACE(@input_string,
CHAR(1), ''),CHAR(2), ''),CHAR(3), ''),CHAR(4), ''),CHAR(5), ''),CHAR(6), ''),CHAR(7), ''),CHAR(8), ''),CHAR(9), ''),CHAR(10), ''),
CHAR(11), ''),CHAR(12), ''),CHAR(13), ''),CHAR(14), ''),CHAR(15), ''),CHAR(16), ''),CHAR(17), ''),CHAR(18), ''),CHAR(19), ''),CHAR(20), ''),
CHAR(21), ''),CHAR(22), ''),CHAR(23), ''),CHAR(24), ''),CHAR(25), ''),CHAR(26), ''),CHAR(27), ''),CHAR(28), ''),CHAR(29), ''),CHAR(30), ''),
CHAR(31), ''), NCHAR(0) COLLATE Latin1_General_100_BIN2, '')
END

Voici la FOR XML code qui s'est brisé. (Je n'ai pas écrit cela. Il était déjà dans la base de code).

SELECT @HTMLTableData =
(
SELECT  HTMLRows 
FROM (
SELECT N'<tr>' + HTMLRow + N'</tr>' AS HTMLRows 
FROM @HTMLRowData
) mi            
FOR XML PATH(''), TYPE
).value('/', 'NVARCHAR(MAX)')
C'est un peu lourd mais remplacer imbriquée est ce qui va se passer pour supprimer ces caractères spécifiques. Remplacer imbriquée est aussi super rapide. Vous pourriez envisager de le transformer en une ligne de table d'une valeur de la fonction au lieu d'une fonction scalaire. FWIW, je n'ai pas cette fonction est horrible. Il y a beaucoup de laid code qui est nécessaire....type de point de fonctions en premier lieu. 🙂
J'avais ce post sur codereview.stackexchange.com
La recherche sur le Web a donné: sqlservercentral.com/Forums/Topic860321-338-1.aspx
Merci pour le compliment 🙂
Cette phrase me fait penser: Nous avons récemment migré à partir de SQL Server 2012 SQL Server 2014 et tous nos POUR de code XML ont commencé à jeter des erreurs à propos de la non-caractères ASCII imprimables. Pourquoi et quelles erreurs? Comment êtes-vous créer votre XMLs? Cela ne devrait pas arriver... Lisez à propos de la XY-Problème, Il pourrait aider à montrer quelques exemples de ce qui a fonctionné dans SS12 et ne fonctionne pas avec l'es14. Je suis tout à fait sûr, que le problème et sa solution! - est ailleurs...

OriginalL'auteur Munir | 2017-03-31