2009-06-30 3 views
5

내가 수행하여 SQL 2008에서 쿼리를 실행하려고 :SQL 이스케이프 ''

@query varchar(max) 

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

EXEC(@query) 

문제는 쿼리가 ...WHERE [Name] = Karl으로 실행 즉, 어떤 이유로 'Karl' 주위에 아포스트로피가 이스케이프되지 않는다는 것입니다 실패합니다.

누구나 의견이 있습니까?

감사

+0

이것은 SQL Server 2008입니다. MySQL이나 PostgreSQL, SQLite 또는 SQL의 다른 변종이 아닙니다. – MiffTheFox

+3

@query 문자열을 출력하면 어떻게 될까요? – Tetraneutron

답변

0

=이 SET의 @query 좋아해요 'SELECT * [이름] = 테이블에서' '' '칼은 단순히 어포 스트로피를 탈출

+0

Karl이 실제 쿼리가 발생하기 때문에 'Karl'과 같은 자신의 이름 앞뒤에 하나의 작은 따옴표가있는 데이터베이스에 저장되지 않으면이 작업이 수행되지 않습니다. SELECT * FROM Table WHERE [Name] = ''Karl '' –

+0

thne 추가 한 번 더 인용구 끝에 같은 짓이야 SET @query = 'SELECT * FROM Table WHERE [Name] =' ''Karl '' '' ''like this는 – KuldipMCA

-1

을' '' '' 이 같은 \ 이스케이프 줄을 사용하여 'SELECT * [이름] = 테이블에서'\ '칼은 \' '

그것이 작동

+3

SQL 서버의 t-sql에서 작동하지 않을 것이다. –

2

도움이되기를 바랍니다'내 SQL Server 관리 Studio에서 기계 :

는 SQL Server의 문자 데이터를 탈출 할 수있는 몇 가지 방법이 있습니다
@query varchar(max) 

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

EXEC(@query) 
+3

Karl이 "Karl"과 같은 그의 이름 앞뒤에 작은 따옴표 두 개가있는 데이터베이스에 저장되어 있지 않으면 실제로 쿼리가 실행되지 않으므로이 작업이 수행되지 않습니다. SELECT * FROM Table WHERE [Name] = '' 'Karl '' ' –

3

, 어떤 사람들은 심지어 QUOTENAME() 기능의 사용을 옹호.

이 주제 분야에 대한 확실한 이해를 원할 경우 숙련 된 SQL Server 개발자가 Dynamic T를 통합하는 데 사용할 수있는 여러 가지 방법에 대해 필수적으로 고려해야 할 내용을 살펴 보는 것이 좋습니다. -SQL을 코딩합니다.

The Curse and Blessings of Dynamic SQL

+0

같은 장소 사람들을 향해 있습니다. – dverespey

1

시도 :

DECLARE @query varchar(max) 

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

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

는 작은 따옴표를하려면 두 개의 인접한 작은 따옴표를 가질 필요가 나타납니다. 당신은 예를 들어, 작은 따옴표와 작은 따옴표를 이스케이프 : 때 문자열 내의 문자

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

이중 따옴표 ('') 따옴표는 단일 따옴표와 같은 역할을합니다.

변수를 사용해 보셨습니까?

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

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

이 작동 :

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) 

출력 :

'Karl' 

그러나 '칼'이 변수 텍스트 인 경우, 매우 대신이 같은 것을 사용하는 것이 권장

:

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 
관련 문제