Ik wil een aanhalingsteken met een escape-teken gebruiken. Hoe kan ik dat doen?
Ik heb een fout ontvangen in SQL Server
Niet-gesloten aanhalingsteken na de tekenreeks.
Ik schrijf een SQL-query in een varchar
-variabele, maar ik heb die fout ontvangen:
Niet-gesloten aanhalingsteken na de tekenreeks.
Ik wil aanhalingstekens gebruiken als escapeteken.
Antwoord 1, autoriteit 100%
Om aan '
te ontsnappen, hoeft u alleen maar een andere voor te zetten: ''
Zoals het tweede antwoord laat zien, is het mogelijk om als volgt te ontsnappen aan een enkel aanhalingsteken:
select 'it''s escaped'
het resultaat zal zijn
it's escaped
Als u SQL samenvoegt in een VARCHAR om uit te voeren (d.w.z. dynamische SQL), dan raad ik u aan de SQL te parametreren. Dit heeft als voordeel dat het helpt beschermen tegen SQL-injectie en dat u zich geen zorgen hoeft te maken over het omzeilen van aanhalingstekens zoals deze (wat u doet door de aanhalingstekens te verdubbelen).
bijv. in plaats van te doen
DECLARE @SQL NVARCHAR(1000)
SET @SQL = 'SELECT * FROM MyTable WHERE Field1 = ''AAA'''
EXECUTE(@SQL)
probeer dit:
DECLARE @SQL NVARCHAR(1000)
SET @SQL = 'SELECT * FROM MyTable WHERE Field1 = @Field1'
EXECUTE sp_executesql @SQL, N'@Field1 VARCHAR(10)', 'AAA'
Antwoord 2, autoriteit 93%
U kunt als volgt aan een citaat ontsnappen:
select 'it''s escaped'
het resultaat zal zijn
it's escaped
Antwoord 3, autoriteit 50%
Je kunt je escape-teken definiëren, maar je kunt het alleen gebruiken met een LIKE
-clausule.
Voorbeeld:
SELECT columns FROM table
WHERE column LIKE '%\%%' ESCAPE '\'
Hier wordt gezocht naar %
in de hele reeks en zo kan men de ESCAPE
-identificatie gebruiken in SQL Server
.
Antwoord 4, autoriteit 21%
Je hoeft alleen maar '
te vervangen door ''
in je string
SELECT colA, colB, colC
FROM tableD
WHERE colA = 'John''s Mobile'
U kunt ook REPLACE(@name, '''', '''''')
gebruiken als u de SQL dynamisch genereert
Als je wilt ontsnappen in een like-statement, moet je de ESCAPE-syntaxis gebruiken
Het is ook vermeldenswaard dat u uzelf blootstelt aan SQL-injectie-aanvallen als u er geen rekening mee houdt. Meer info op Google of: http://it.toolbox.com/wiki/index .php/How_do_I_escape_single_quotes_in_SQL_queries%3F
Antwoord 5, autoriteit 11%
Escape-aanhalingstekens in MSSQL worden gedaan door dubbele aanhalingstekens, dus een ''
of een ""
zal een escaped '
en "
, respectievelijk.
Antwoord 6, autoriteit 2%
Als u gebruikersinvoer in een variabele wilt vermijden, kunt u dit doen zoals hieronder in SQL
Set @userinput = replace(@userinput,'''','''''')
De @userinput wordt nu geëscaped met een extra enkel aanhalingsteken voor elke keer dat een aanhalingsteken voorkomt
Antwoord 7
WHERE username LIKE '%[_]d'; -- @Lasse solution
WHERE username LIKE '%$_d' ESCAPE '$';
WHERE username LIKE '%^_d' ESCAPE '^';
VAN:
SQL Server Escape een underscore
Antwoord 8
U kunt het teken **\**
gebruiken voor de waarde die u wilt laten ontsnappen, bijv.
insert into msglog(recipient) values('Mr. O\'riely')
select * from msglog where recipient = 'Mr. O\'riely'
Antwoord 9
Om de code gemakkelijk leesbaar te houden, kunt u vierkante haken []
gebruiken om de tekenreeks met '
te citeren of omgekeerd.