web-dev-qa-db-fra.com

Remplacer les guillemets simples dans SQL Server

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
43
acadia

Vous devez doubler vos guillemets simples comme suit:

REPLACE(@strip, '''', '')
96
David Andres

Essayez REPLACE(@strip,'''','')

SQL utilise deux guillemets pour en représenter un dans une chaîne.

25
ScottLenart

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 .

17
Steve Wortham

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 ].

4
Remus Rusanu

Vous pourriez utiliser le personnage (39)

insert into my_table values('hi, my name'+char(39)+'s tim.')
3
NicoJuicy

Essayez d'échapper à la citation unique avec une seule citation:

Replace(@strip, '''', '')
2
Yannick Motton

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.

1
Gus Hixson

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.

1
Esteban Küber

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 ...

0
AviD

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!

0
jovenb

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;
0
Brad Waite