SQL Server의 이스케이프 문자


95

이스케이프 문자와 함께 따옴표를 사용하고 싶습니다. 어떻게 할 수 있습니까?

SQL Server에서 오류를 받았습니다.

문자열 뒤의 닫히지 않은 따옴표.

varchar변수에 SQL 쿼리를 작성하고 있지만 해당 오류를 받았습니다.

문자열 뒤의 닫히지 않은 따옴표.

따옴표를 이스케이프 문자로 사용하고 싶습니다.


4
당신은 기쁘게 할 수 보여 우리에게 질의를?
marc_s

답변:


78

탈출하기 위해서는 '다른 것을 먼저 넣어야합니다.''

두 번째 답변에서 알 수 있듯이 다음과 같이 작은 따옴표를 피할 수 있습니다.

select 'it''s escaped'

결과는

it's escaped

실행하기 위해 SQL을 VARCHAR에 연결하는 경우 (즉, 동적 SQL), SQL 매개 변수화를 권장합니다. 이것은 SQL 인젝션을 방지하는 데 도움이되는 이점이 있으며 이와 같이 따옴표를 이스케이프하는 것에 대해 걱정할 필요가 없음을 의미합니다 (따옴표를 두 배로 늘림으로써 수행).

예 대신에

DECLARE @SQL NVARCHAR(1000)
SET @SQL = 'SELECT * FROM MyTable WHERE Field1 = ''AAA'''
EXECUTE(@SQL)

이 시도:

DECLARE @SQL NVARCHAR(1000)
SET @SQL = 'SELECT * FROM MyTable WHERE Field1 = @Field1'
EXECUTE sp_executesql @SQL, N'@Field1 VARCHAR(10)', 'AAA'

30
왜 이것이 허용되는 대답입니까? 질문에 대한 답이 아닙니다.
Peter Moore

3
@PeterMoore OP가 내 답변의 첫 번째 부분을 사용했거나 (아래의 다른 답변에 따라 따옴표를 두 배로 늘림) 문자열 변수에서 SQL 쿼리를 작성하는 데 권장하는 선호하는 접근 방식을 사용했을 것입니다. SQL. 어느 쪽이든, 두 질문에 대한 답변입니다
AdaTheDev

질문에 대한 답이 아닙니다. 때때로 사용자는 ODBC 연결이 필요하므로 순수한 SQL 만 사용할 수 있습니다.
Tony

더 명확하고 질문에 더 적합하도록 수정 된 답변
이전

122

다음과 같이 인용문을 이스케이프 할 수 있습니다.

select 'it''s escaped'

결과는

it's escaped

이것이 답이되어야합니다.
Tony

45

이스케이프 문자를 정의 할 수 있지만 LIKE절 과 함께 만 사용할 수 있습니다 .

예:

SELECT columns FROM table
WHERE column LIKE '%\%%' ESCAPE '\'

여기 %에서 전체 문자열 을 검색 하고 이것이 ESCAPE에서 식별자를 사용할 수있는 방법 입니다 SQL Server.


21

문자열 내부로 교체 '하면 ''됩니다.

SELECT colA, colB, colC
FROM tableD
WHERE colA = 'John''s Mobile'

REPLACE(@name, '''', '''''')SQL을 동적으로 생성하는 경우 에도 사용할 수 있습니다.

like 문 내에서 이스케이프하려면 ESCAPE 구문을 사용해야합니다.

고려하지 않으면 SQL 주입 공격에 노출되어 있다는 점도 언급 할 가치가 있습니다. Google 또는 http://it.toolbox.com/wiki/index.php/How_do_I_escape_single_quotes_in_SQL_queries%3F 에서 추가 정보


아직 dugokontov 또는 RichardPianka의 답변에는 비슷한 -1이 없습니까?
Seph

@MichaelMunsey 직접 시도해보십시오 : select '오류를 반환합니다 Unclosed quotation mark after the character string ''. 내 대답에서 나는 "두 가지 만 사용 '하지 않으며 왜 내 대답이 반대표가있는 유일한 대답인지 확실하지 않습니다.
Seph

12

MSSQL에서 이스케이프 따옴표는 큰 따옴표로 수행되므로 a ''또는 a ""는 각각 이스케이프 '및 을 생성 "합니다.


0

**\**이스케이프하려는 값 앞에 문자를 사용할 수 있습니다.insert into msglog(recipient) values('Mr. O\'riely') select * from msglog where recipient = 'Mr. O\'riely'


0

변수에서 사용자 입력을 이스케이프하려면 SQL 내에서 아래와 같이 할 수 있습니다.

  Set @userinput = replace(@userinput,'''','''''')

@userinput은 이제 따옴표가 발생할 때마다 추가 작은 따옴표로 이스케이프됩니다.



-2

코드를 읽기 쉽게 유지하려면 대괄호 []를 사용 하여를 포함하는 문자열을 인용 '하거나 그 반대로 할 수 있습니다 .


이것은 올바르지 않습니다. 대괄호는 필드, 테이블 또는 스키마 이름의 잘못된 문자에 대해 작동합니다.
Jamie Marshall 19

예, 맞습니다. 문자열 내용이 아닌 객체 이름입니다. 질문을 잘못 읽어야합니다.
Ben
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.