복붙노트

[SQL] 어떻게 SQL Server의 단일 견적을 탈출합니까?

SQL

어떻게 SQL Server의 단일 견적을 탈출합니까?

나는 SQL 서버 9 테이블에 텍스트 데이터를 삽입하기 위해 노력하고있어.

텍스트는 작은 따옴표 ( ')를 포함한다.

나는 어떻게 탈출합니까?

나는 두 개의 작은 따옴표를 사용했지만, 그것은 나에게 약간의 오차 던졌다.

예를 들면. ( '안녕하세요, 제 이름'의 팀 '.) MY_TABLE 값에 삽입;

해결법

  1. ==============================

    1.작은 따옴표는 당신이 당신의 예에서 우리에게 보여준 것처럼, 그들을 두배로 이스케이프된다. 다음 SQL이 기능을 보여줍니다. 나는 SQL Server 2008에서 그것을 테스트 :

    작은 따옴표는 당신이 당신의 예에서 우리에게 보여준 것처럼, 그들을 두배로 이스케이프된다. 다음 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.
    
  2. ==============================

    2.(내 최근 REPLACE () 쿼리 중 하나하지 않았다 같은) 당신을 위해 작동하지 않는 또 다른 작은 따옴표와 작은 따옴표를 이스케이프 경우에, 당신은 당신의 쿼리 후 쿼리, 다음 SET QUOTED_IDENTIFIER ON하기 전에 SET QUOTED_IDENTIFIER OFF를 사용할 수 있습니다.

    (내 최근 REPLACE () 쿼리 중 하나하지 않았다 같은) 당신을 위해 작동하지 않는 또 다른 작은 따옴표와 작은 따옴표를 이스케이프 경우에, 당신은 당신의 쿼리 후 쿼리, 다음 SET QUOTED_IDENTIFIER ON하기 전에 SET QUOTED_IDENTIFIER OFF를 사용할 수 있습니다.

    예를 들면

    SET QUOTED_IDENTIFIER OFF;
    
    UPDATE TABLE SET NAME = REPLACE(NAME, "'S", "S");
    
    SET QUOTED_IDENTIFIER ON;
    -- set OFF then ON again
    
  3. ==============================

    3.방법에 대해 :

    방법에 대해 :

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

    4.그것의 독특한 그것이 당신을 위해 작동하지 않았다, 그래서 인용의 배로하는 것은, 일을해야; 그러나, 대안은 문자열 주위에 대신 한 사람의, 큰 따옴표 문자를 사용합니다. 즉,

    그것의 독특한 그것이 당신을 위해 작동하지 않았다, 그래서 인용의 배로하는 것은, 일을해야; 그러나, 대안은 문자열 주위에 대신 한 사람의, 큰 따옴표 문자를 사용합니다. 즉,

    MY_TABLE 값 ( ". 안녕하세요, 제 이름의 팀 ')에 삽입;

  5. ==============================

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

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

    당신은 단순히 문자열을 두 배로 '을 위해, 예를 들어, '나는 행복 해요'를 선택 - 얻을 것이다 : 나는 행복 해요

    모든 문자를 들어 당신이 확실의 없습니다 : SQL 서버에 어떤 문자가 선택 유니 코드로 유니 코드를 얻을 수 있습니다 ( ':') (당신이 수를 유지)

    당신은 또한 '+ CHAR (39)으로'를 선택할 수 있습니다이 경우 그래서 '행복합니다

  6. ==============================

    6.또 다른 점은 정말 (ASCII 27) 또는 유니 코드 2019 (비슷하지만 동일하지) '고전 ASCII로 저장되어 있는지 아닌지 조심해야합니다. 이것은 삽입에 큰 문제가 아니지만, 선택 및 업데이트에 세계를 의미 할 수 있습니다. 그것은 유니 코드 값이 다음 이스케이프의 경우 'WHERE 절에서 (예를 들면 곳 ㅋ ㅋ ='노동자 '의 경화제')을 '에서 "노동자의 경화제는"실제로 있다면 당신이 찾고있는 값처럼 반환하지가 유니 코드 value.If는 클라이언트 어플은 복사 할뿐만 아니라, 무료로 키를 지원하고 기반 입력을 붙여, 일부 행에 유니 코드를 할 수 있고, 다른 사람의 ASCII! 이것을 확인하는 간단한 방법은 당신이 찾고있는 값을 다시 가져올 것이다 오픈했다 질의 어떤 종류의 일을하는 것입니다, 그리고 복사해서 메모장 ++ 또는 다른 유니 코드 지원 편집기에 붙여 넣습니다. 아스키 값과 유니 코드 일 사이의 서로 다른 모습이 눈에 분명해야하지만 항문 향하다 경우, 그것은 16 진수 편집기 27 (ASCII) 또는 92 (유니 코드)로 표시됩니다.

    또 다른 점은 정말 (ASCII 27) 또는 유니 코드 2019 (비슷하지만 동일하지) '고전 ASCII로 저장되어 있는지 아닌지 조심해야합니다. 이것은 삽입에 큰 문제가 아니지만, 선택 및 업데이트에 세계를 의미 할 수 있습니다. 그것은 유니 코드 값이 다음 이스케이프의 경우 'WHERE 절에서 (예를 들면 곳 ㅋ ㅋ ='노동자 '의 경화제')을 '에서 "노동자의 경화제는"실제로 있다면 당신이 찾고있는 값처럼 반환하지가 유니 코드 value.If는 클라이언트 어플은 복사 할뿐만 아니라, 무료로 키를 지원하고 기반 입력을 붙여, 일부 행에 유니 코드를 할 수 있고, 다른 사람의 ASCII! 이것을 확인하는 간단한 방법은 당신이 찾고있는 값을 다시 가져올 것이다 오픈했다 질의 어떤 종류의 일을하는 것입니다, 그리고 복사해서 메모장 ++ 또는 다른 유니 코드 지원 편집기에 붙여 넣습니다. 아스키 값과 유니 코드 일 사이의 서로 다른 모습이 눈에 분명해야하지만 항문 향하다 경우, 그것은 16 진수 편집기 27 (ASCII) 또는 92 (유니 코드)로 표시됩니다.

  7. ==============================

    7.우리 중 많은 이스케이프 단일 지수의 인기있는 방법은 아래와 같이 쉽게를 두배입니다 것을 알고있다.

    우리 중 많은 이스케이프 단일 지수의 인기있는 방법은 아래와 같이 쉽게를 두배입니다 것을 알고있다.

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

    우리는 작은 따옴표를 이스케이프의 다른 대체 방법을 지켜 볼 것입니다.

    1.UNICODE 문자

    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;
    

    결론

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

  8. ==============================

    8.이 작업을해야합니다

    이 작업을해야합니다

    DECLARE @singleQuote CHAR 
    SET @singleQuote =  CHAR(39)
    
    insert into my_table values('hi, my name'+ @singleQuote +'s tim.')
    
  9. ==============================

    9.그냥 '아무것도하기 전에 삽입 할 삽입합니다. 그것은 SQLSERVER에서 이스케이프 문자처럼 될 것입니다

    그냥 '아무것도하기 전에 삽입 할 삽입합니다. 그것은 SQLSERVER에서 이스케이프 문자처럼 될 것입니다

    예: 당신이 필드로있을 때, 난 괜찮아. 넌 할 수있어: UPDATE MY_TABLE SET 행 = '있는 I''m 벌금.';

  10. ==============================

    10.다음 구문은 당신에게 ONLY ONE 따옴표를 이스케이프합니다 :

    다음 구문은 당신에게 ONLY ONE 따옴표를 이스케이프합니다 :

    SELECT ''''
    

    결과는 단일 인용 될 것입니다. : 동적 SQL을 만들기위한 매우 도움이 될 수 있습니다.

  11. ==============================

    11.이 작업을해야합니다 : 백 슬래시를 사용하고 따옴표를 넣어

    이 작업을해야합니다 : 백 슬래시를 사용하고 따옴표를 넣어

    "UPDATE my_table SET row =\"hi, my name's tim.\";
    
  12. from https://stackoverflow.com/questions/1586560/how-do-i-escape-a-single-quote-in-sql-server by cc-by-sa and MIT license