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.