Escape-teken in SQL Server

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.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes