J'ai cette fonction dans SQL Server pour remplacer les guillemets simples.
Mais lorsque j'insère une citation, une erreur se produit sur Replace(@strip,''',''))
:
Create Function [dbo].[fn_stripsingleQuote]
(@strStrip varchar(Max))
returns varchar
as
begin
declare @CleanString varchar(Max)
SET @var=(Replace(@strip,'',''))
return @var
end
Vous devez doubler vos guillemets simples comme suit:
REPLACE(@strip, '''', '')
Essayez REPLACE(@strip,'''','')
SQL
utilise deux guillemets pour en représenter un dans une chaîne.
Si vous devez supprimer complètement les guillemets simples, procédez comme suit:
Replace(@strip, '''', '')
Cependant, normalement, vous remplacez "par" et cela rendra SQL Server heureux lorsque vous interrogez la base de données. Le truc avec l’une des fonctions SQL intégrées (comme le remplacement) est qu’elles vous obligent aussi à doubler vos guillemets simples.
Donc, pour remplacer "par" dans le code, procédez comme suit:
Replace(@strip, '''', '''''')
Bien sûr ... dans certaines situations, vous pouvez éviter de le faire entièrement si vous utilisez des paramètres lors de l'interrogation de la base de données. Supposons que vous interrogez la base de données à partir d'une application .NET, puis que vous utiliseriez la classe SqlParameter pour alimenter les paramètres SqlCommand de la requête et que toute cette activité de devis sera automatiquement prise en charge. C'est généralement la méthode préférée, car les paramètres SQL aideront également à prévenir les attaques injection SQL .
On dirait que vous essayez de dupliquer la fonctionnalité QUOTENAME . Cette fonction intégrée peut être utilisée pour ajouter des délimiteurs et échapper correctement les délimiteurs à l'intérieur des chaînes. Elle reconnaît les deux '
et double "
guillemets comme délimiteurs, ainsi que des crochets [
et ]
.
Vous pourriez utiliser le personnage (39)
insert into my_table values('hi, my name'+char(39)+'s tim.')
Essayez d'échapper à la citation unique avec une seule citation:
Replace(@strip, '''', '')
J'ai rencontré une étrange anomalie qui s'appliquerait ici. En utilisant Google API et en obtenant la réponse au format XML, la conversion en type de données XML échouait à cause de guillemets simples.
Remplacer (@Strip, '' '', '')
ne fonctionnait pas parce que la citation simple était le caractère ascii 146 au lieu de 39. J'ai donc utilisé:
Remplacez (@Strip, car (146), '')
qui fonctionne également pour les guillemets simples ordinaires, char (39) et pour tout autre caractère spécial.
Le traçage/remplacement/scaping des guillemets simples à partir de l'entrée utilisateur ( assainissement de l'entrée ) doit être effectué avant l'instruction SQL atteint la base de données.
En plus d'avoir besoin d'échapper à la citation (en utilisant des guillemets doubles), vous avez également confondu les noms des variables: vous utilisez @var et @strip, au lieu de @CleanString et @strStrip ...
Je pense que c'est la déclaration SQL la plus courte pour cela:
CREATE FUNCTION [dbo].[fn_stripsingleQuote] (@strStrip varchar(Max))
RETURNS varchar(Max)
AS
BEGIN
RETURN (Replace(@strStrip ,'''',''))
END
J'espère que ça aide!
Si vous ne souhaitez pas utiliser votre devis unique avec un autre devis unique (contrairement à l'une de mes requêtes récentes REPLACE ()), vous pouvez utiliser SET QUOTED_IDENTIFIER OFF avant votre requête, puis SET QUOTED_IDENTIFIER ON après.
Par exemple
SET QUOTED_IDENTIFIER OFF;
UPDATE TABLE SET NAME = REPLACE(NAME, "'S", "S");
SET QUOTED_IDENTIFIER OFF;