your programing

SQL Server에서 작은 따옴표를 어떻게 이스케이프합니까?

lovepro 2020. 9. 28. 09:47
반응형

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' -- will get: I'm happy


확실하지 않은 문자의 경우 : SQL Server에서 문자의 유니 코드를 다음과 같이 얻을 수 있습니다. 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 (유니 코드)로 표시됩니다.


작동합니다. 백 슬래시를 사용하고 큰 따옴표를 넣으십시오.

"UPDATE my_table SET row =\"hi, my name's tim.\";

이것은 작동합니다

DECLARE @singleQuote CHAR 
SET @singleQuote =  CHAR(39)

insert into my_table values('hi, my name'+ @singleQuote +'s tim.')

삽입 할 항목 앞에 '를 삽입하십시오. sqlServer의 이스케이프 문자와 같습니다.

예 : 필드가 있으면 I 'm fine . 당신은 할 수 있습니다 : UPDATE my_table SET row = 'I''m fine.';


다음 구문은 인용 부호 하나만 이스케이프합니다.

SELECT ''''

The result will be a single quote. Might be very helpful for creating dynamic SQL :). enter image description here


string value = "Abhishek's";

value = Replace(value,"'","''");

참고URL : https://stackoverflow.com/questions/1586560/how-do-i-escape-a-single-quote-in-sql-server

반응형