Come faccio a sfuggire a una sola offerta in SQL Server?
-
22-09-2019 - |
Domanda
Sto cercando di insert
alcuni dati di testo in una tabella in SQL Server
9.
Il testo include una singola citazione ( ').
Come faccio fuga che?
Ho provato ad utilizzare due apici, ma mi ha buttato alcuni errori.
ad es. insert into my_table values('hi, my name''s tim.');
Soluzione
le virgolette singole sono fuggiti da loro raddoppio , proprio come ci hai mostrato nel tuo esempio. Il seguente SQL illustra questa funzionalità. Ho testato 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.
Altri suggerimenti
Se la fuga il tuo preventivo singolo con un altro apostrofo non funziona per voi (come se non ha fatto per uno dei miei ultimi domande REPLACE()
), è possibile utilizzare SET QUOTED_IDENTIFIER OFF
prima della tua ricerca, allora SET QUOTED_IDENTIFIER ON
dopo la query.
Ad esempio
SET QUOTED_IDENTIFIER OFF;
UPDATE TABLE SET NAME = REPLACE(NAME, "'S", "S");
SET QUOTED_IDENTIFIER ON;
-- set OFF then ON again
Come su:
insert into my_table values('hi, my name'+char(39)+'s tim.')
Il raddoppio della citazione dovrebbe hanno lavorato, quindi è strano che non ha funzionato per voi; tuttavia, in alternativa è l'utilizzo di caratteri doppi apici, al posto di quelle singole, attorno alla stringa. Cioè.,
insert into my_table values("hi, my name's tim."
);
2 modi per risolvere questo:
per '
si può semplicemente raddoppiarla nella stringa, per esempio
select 'I''m happpy' -- will get: I'm happy
Per qualsiasi charactor non si è sicuri di: in SQL Server è possibile ottenere unicode qualsiasi char da select unicode(':')
Quindi questo caso si può anche select 'I'+nchar(39)+'m happpy'
Anche un'altra cosa da stare attenti è se sia o non sia in realtà memorizzato come ASCII classico '(ASCII 27) o Unicode 2019 (che è simile, ma non lo stesso).
Questo non è un grosso problema su inserti, ma può significare il mondo su seleziona ed aggiornamenti.
Se è il valore unicode poi sfuggire alla 'in una clausola WHERE (per esempio dove bla = '' comp' Lavoratori) restituirà 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 senza chiave, così come copiare e incollare ingresso in base, potrebbe essere Unicode in alcune righe, e ASCII in altri!
Un modo semplice per verificare questo è di fare una sorta di open ended interrogazione che riporterà il valore che si sta cercando, e quindi copiare e incollare che in Notepad ++ o un altro editor di supporto unicode.
L'aspetto differente tra il valore ASCII e Unicode uno dovrebbe essere ovvio per gli occhi, ma se ci si china verso l'anale, verrà visualizzato come 27 (ASCII) o 92 (Unicode) in un editor esadecimale.
Questo dovrebbe funzionare: utilizzare una barra posteriore e mettere un doppio apice
"UPDATE my_table SET row =\"hi, my name's tim.\";
Questo dovrebbe funzionare
DECLARE @singleQuote CHAR
SET @singleQuote = CHAR(39)
insert into my_table values('hi, my name'+ @singleQuote +'s tim.')
Basta inserire una 'prima di tutto da inserire. Sarà come un carattere di escape in sqlserver
Esempio: Quando si dispone di un campo come, sto bene . tu puoi fare: AGGIORNAMENTO my_table SET fila = '' m bene.';
string value = "Abhishek's";
value = Replace(value,"'","''");