[sql] SQL Server에서 작은 따옴표를 이스케이프 처리하려면 어떻게해야합니까?

9의 insert텍스트 데이터를 테이블에 넣으려고합니다 SQL Server.

텍스트는 작은 따옴표 ( ‘)를 포함합니다.

나는 그것을 어떻게 탈출합니까?

두 개의 작은 따옴표를 사용해 보았지만 약간의 오류가 발생했습니다.

예. insert into my_table values('hi, my name''s tim.');



답변

작은 따옴표는 예제에서 우리가 보여 주듯이 따옴표를 두 배로 늘려서 탈출 합니다. 다음 SQL은이 기능을 보여줍니다. SQL Server 2008에서 테스트했습니다.

DECLARE @my_table TABLE (
    [value] VARCHAR(200)
)

INSERT INTO @my_table VALUES ('hi, my name''s tim.')

SELECT * FROM @my_table

결과

value
==================
hi, my name's tim.


답변

작은 따옴표를 다른 작은 따옴표로 이스케이프 처리하지 않으면 (최근의 REPLACE()쿼리 중 하나와 같지 않은 것처럼 ) SET QUOTED_IDENTIFIER OFF쿼리 전에 사용할 SET QUOTED_IDENTIFIER ON수 있습니다.

예를 들어

SET QUOTED_IDENTIFIER OFF;

UPDATE TABLE SET NAME = REPLACE(NAME, "'S", "S");

SET QUOTED_IDENTIFIER ON;
-- set OFF then ON again


답변

어때요?

insert into my_table values('hi, my name'+char(39)+'s tim.')


답변

견적이 배가 된 것은 효과가 있었으므로, 그것은 당신에게 효과가 없었습니다. 그러나 대안은 문자열 주위에 작은 따옴표 대신 큰 따옴표를 사용하는 것입니다. 즉,

insert into my_table values("hi, my name's tim.");


답변

이 문제를 해결하는 두 가지 방법 :


에 대한 '당신이 단순히 문자열을 두배로 할 수있다, 예를 들면
select 'I''m happpy'– 얻을 것이다 :I'm happy


어떤 문자에 대해서도 확실하지 않습니다 .SQL 서버에서는 다음과 같이 문자의 유니 코드를 얻을 수 있습니다 select unicode(':')(숫자 유지)

이 경우에도 select 'I'+nchar(39)+'m happpy'


답변

또한주의해야 할 또 다른 사항은 실제로 클래식 ASCII ‘(ASCII 27) 또는 유니 코드 2019 (유사하지만 동일하지는 않음)로 저장되는지 여부입니다.

이것은 인서트에 큰 문제는 아니지만 선택과 업데이트에 대한 세계를 의미 할 수 있습니다.
유니 코드 값인 경우 WHERE 절에서 ‘를 이스케이프 처리하면 (예 : blah =’Workers ‘s Comp ‘) “Worker ‘s Comp”의’가 실제로 유니 코드 값.
이를 확인하는 간단한 방법은 검색중인 값을 다시 가져온 다음 메모장 ++ 또는 다른 유니 코드 지원 편집기에 복사하여 붙여 넣는 일종의 개방형 쿼리를 수행하는 것입니다.

클라이언트 응용 프로그램이 프리 키를 지원하고 복사 및 붙여 넣기 기반 입력을 지원하는 경우 일부 행은 유니 코드이고 다른 행은 ASCII 일 수 있습니다!

ascii 값과 유니 코드 값 사이의 다른 모양은 눈에 분명해야하지만 항문을 향해 기울이면 16 진 편집기에서 27 (ascii) 또는 92 (unicode)로 표시됩니다.


답변

우리 중 많은 사람들이 작은 따옴표를 이스케이프 처리하는 방법이 아래처럼 쉽게 두 배로 늘리는 것임을 알고 있습니다.

PRINT 'It''s me, Arul.';

작은 따옴표 방법을 두 배로

작은 따옴표를 이스케이프 처리하는 다른 대체 방법을 살펴 보겠습니다.

1. 유니 코드 문자

39는 작은 따옴표의 유니 코드 문자입니다. 아래와 같이 사용할 수 있습니다.

PRINT 'Hi,it'+CHAR(39)+'s Arul.';
PRINT 'Helo,it'+NCHAR(39)+'s Arul.';

유니 코드 문자

2.QUOTED_IDENTIFIER

또 다른 간단하고 최상의 대체 솔루션은 QUOTED_IDENTIFIER를 사용하는 것입니다. QUOTED_IDENTIFIER가 OFF로 설정되면 문자열을 큰 따옴표로 묶을 수 있습니다. 이 시나리오에서는 작은 따옴표를 이스케이프 처리 할 필요가 없습니다. 따라서이 방법은 작은 따옴표로 많은 문자열 값을 사용하는 동안 매우 유용합니다. 열 값에 작은 따옴표가있는 INSERT / UPDATE 스크립트를 너무 많이 사용하면 매우 유용합니다.

SET QUOTED_IDENTIFIER OFF;
PRINT "It's Arul."
SET QUOTED_IDENTIFIER ON;

QUOTE_IDENTIFIER

결론

위에서 언급 한 방법은 AZURE 및 온 프레미스 모두에 적용 할 수 있습니다.