Come faccio a sfuggire a una singola offerta in SQL Server?

Sto cercando di insert alcuni dati di testo in una tabella in SQL Server 9.

Il testo include una citazione singola (‘).

Come posso evitarlo?

Ho provato a utilizzare due virgolette singole, ma mi ha gettato alcuni errori.

per esempio. insert into my_table values('hi, my name''s tim.');

Le virgolette sono sfuggite raddoppiandole , proprio come ci hai mostrato nell’esempio. Il seguente codice SQL illustra questa funzionalità. L’ho provato su SQL Server 2008:

 DECLARE @my_table TABLE ( [value] VARCHAR(200) ) INSERT INTO @my_table VALUES ('hi, my name''s tim.') SELECT * FROM @my_table 

risultati

 value ================== hi, my name's tim. 

Se l’escape del tuo preventivo singolo con un’altra quota singola non funziona per te (come non ha fatto per una delle mie recenti query REPLACE() ), puoi utilizzare SET QUOTED_IDENTIFIER OFF prima della query, quindi SET QUOTED_IDENTIFIER ON dopo la tua query.

Per esempio

 SET QUOTED_IDENTIFIER OFF; UPDATE TABLE SET NAME = REPLACE(NAME, "'S", "S"); SET QUOTED_IDENTIFIER ON; -- set OFF then ON again 

Che ne dite di:

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

Il raddoppio della citazione avrebbe dovuto funzionare, quindi è strano che non funzioni per te; tuttavia, un’alternativa utilizza caratteri doppia citazione, anziché singoli, attorno alla stringa. Vale a dire,

insert into my_table values("hi, my name's tim." );

Un’altra cosa da tenere a mente è se è memorizzato o meno come un classico ASCII ‘(ASCII 27) o Unicode 2019 (che sembra simile, ma non uguale).

Questo non è un grosso problema per gli inserti, ma può significare che il mondo su seleziona e aggiornamenti.
Se si tratta del valore unicode, sfuggire alla clausola ‘in WHERE (ad esempio dove blah =’ Comp del lavoratore ‘) verrà restituito come il valore che si sta cercando non è lì se il “in” Comp del lavoratore è in realtà il valore unicode.

Se l’applicazione client supporta la chiave libera, così come l’input basato su copia e incolla, potrebbe essere Unicode in alcune righe e ASCII in altre!

Un modo semplice per confermare ciò è eseguire una sorta di query aperta che restituirà il valore che si sta cercando, quindi copiarlo e incollarlo in Notepad ++ o in un altro editor di supporto Unicode.

L’aspetto differente tra il valore di ascii e quello di unicode dovrebbe essere ovvio per gli occhi, ma se ti inclini verso l’anale, apparirà come 27 (ascii) o 92 (unicode) in un editor esadecimale.

2 modi per ovviare a questo:


per ' puoi semplicemente raddoppiarlo nella stringa, ad esempio select 'I''m happpy' -- will get: I'm happy


Per qualsiasi charactor di cui non sei sicuro: in sql server puoi ottenere un unicode di char select unicode(':')

In questo caso puoi anche select 'I'+nchar(39)+'m happpy'

Questo dovrebbe funzionare

 DECLARE @singleQuote CHAR SET @singleQuote = CHAR(39) insert into my_table values('hi, my name'+ @singleQuote +'s tim.') 

Sono d’accordo con Cory Larson. Quando utilizzo SQL Server 2005, utilizzo la virgoletta singola per evitare la citazione singola. Sembra strano, ma funziona per me. Prova con quello.

Riferimento: citazioni di escape di SQL Server 2005

 string value = "Abhishek's"; value = Replace(value,"'","''");