2009-06-30 16 views
5

Sto cercando di eseguire una query in SQL 2008 facendo:SQL Escape ''

@query varchar(max) 

SET @query = 'SELECT * FROM Table WHERE [Name] = ' 'Karl' ' ' 

EXEC(@query) 

Il problema è che per qualche motivo gli apostrofi intorno 'Karl' non vengono sfuggiti, vale a dire la query viene eseguita come ...WHERE [Name] = Karl e fallisce.

Qualcuno ha un suggerimento?

Grazie

Karl

+0

Questo è SQL Server 2008, giusto? Non MySQL o PostgreSQL o SQLite o nessuna delle altre varianti di SQL? – MiffTheFox

+3

Cosa vedi se stampi la stringa @query? – Tetraneutron

risposta

0

fare come questo SET @ query = 'SELECT * FROM Tabella WHERE [nome] = ''' 'Karl' '' ''

+0

non funzionerà, a meno che Karl non venga memorizzato nel database con una sola citazione prima e dopo il suo nome come "Karl" perché risulta essere la query effettiva: SELECT * FROM Table WHERE [Name] = '' Karl '' –

+0

aggiungi un altro Citazione alla fine fai questo SET @query = 'SELECT * FROM Table WHERE [Name] =' '' 'Karl' '' '' 'come questo – KuldipMCA

-1

semplicemente sfuggire alle apostrofi utilizzando la barra di fuggire \ come questo 'SELECT * FROM Tabella WHERE [nome] =' \ '\' 'Karl'

Speranza che aiuta

+3

che non funzionerà nel tlql del server sql –

2

questo funziona sul mio macchina da SQL Server Management Studio:

@query varchar(max) 

SET @query = 'SELECT * FROM Table WHERE [Name] = ''''''Karl''''''' 

EXEC(@query) 
+3

non funzionerà, a meno che Karl non venga memorizzato nel database con due virgolette singole prima e dopo il suo nome come '' Karl '' perché risulta essere la query effettiva: SELECT * FROM Table WHERE [Name] = '' 'Karl '' ' –

3

Ci sono diversi modi che si può sfuggire dati di caratteri in SQL Server, alcune persone anche sostengono l'uso delle QUOTENAME() funzioni.

Se si desidera veramente sviluppare una solida conoscenza di quest'area tematica, si consiglia di dare un'occhiata a ciò che gli sviluppatori di SQL Server considerano come una lettura essenziale in relazione ai diversi metodi che è possibile utilizzare per incorporare Dynamic T -SQL nella tua codifica.

The Curse and Blessings of Dynamic SQL

+0

Lo stesso posto in cui punto le persone. – dverespey

1

Prova:

DECLARE @query varchar(max) 

SET @query = 'SELECT * FROM Table WHERE [Name] = ''Karl''' 

PRINT 'when in doubt, print the query out: '+ISNULL(@query,'') 
EXEC(@query) 

di avere un unico citazione appare, è necessario disporre di due apici adiacenti. Si sfuggire una sola offerta con una sola citazione, per esempio:

PRINT ''''  --will print a one single quote 
PRINT '''''' --will print two single quotes 
PRINT 'can''t' --will print can't 
0

Un doppio singolo ('') citazione agirà come un singolo singolo preventivo quando all'interno di una stringa letterale.

Hai provato a utilizzare una variabile?

declare @karl_name varchar(10); 
set @karl_name = '''Karl'''; 

SELECT * FROM Table WHERE [Name] = @karl_name 
0

Questo funziona:

create table #demo([Name] varchar(max)) 
insert into #demo([Name]) values('''Karl''') 
insert into #demo([Name]) values('Karl') 
declare @query varchar(max) 
set @query = 'SELECT * FROM #demo WHERE [Name] = ''''''Karl''''''' 
EXEC(@query) 

uscita:

'Karl' 

Ma se 'Karl' è un testo variabile, è altamente consigliato di usare qualcosa di simile a questo, invece:

declare @query nvarchar(max) 
declare @param varchar(max) 
set @param = N'''Karl''' 
set @query = N'SELECT * FROM #demo WHERE [Name] = @param' 
exec sp_executesql @query, N'@param varchar(max)', @param