복붙노트

[SQL] '와'... 이전 문 키워드 근처의 구문이 잘못은 세미콜론으로 종료되어야합니다

SQL

'와'... 이전 문 키워드 근처의 구문이 잘못은 세미콜론으로 종료되어야합니다

SQL 서버 2005를 사용 임. 내 저장 프로 시저의 조항 2가

WITH SomeClause1 AS
(
  SELECT ....
)
WITH SomeClause2 AS
(
  SELECT ....
)

하지만 오류가 발생합니다

'와'키워드 근처의 구문이 잘못되었습니다. 이 문이 공통 테이블 표현식 또는 XMLNAMESPACES 절 인 경우, 이전 문은 세미콜론으로 종료해야합니다.

내 옵션은 무엇입니까? 내가 모르는 어떤 스플리터가 있습니까?

해결법

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

    1.열팽창 계수를 구분하려면 쉼표를 사용

    열팽창 계수를 구분하려면 쉼표를 사용

    ;WITH SomeClause1 AS
    (
      SELECT ....
    )
    , SomeClause2 AS
    (
      SELECT ....
    )
    
  2. ==============================

    2.를 추가 잊어 ";" 이전 문에, 같은 오류 메시지가 말한다. "; 함께"당신은 괜찮을거야 ... : 그냥 언제나처럼 코딩하는 습관을

    를 추가 잊어 ";" 이전 문에, 같은 오류 메시지가 말한다. "; 함께"당신은 괜찮을거야 ... : 그냥 언제나처럼 코딩하는 습관을

    ;WITH SomeClause1 AS
    (
      SELECT ....
    )
    

    그러나, 당신은 쉼표로 여러 열팽창 계수를 연결,하지만해야합니다 "; 함께"항상 앞에 세미콜론이 있습니다

    ;WITH SomeClause1 AS
    (
      SELECT ....
    )
    ,SomeClause2 AS
    (
      SELECT ....
    )
    
  3. ==============================

    3.믈라덴 Prajdic는 좋은 작품 "XMLNAMESPACES과"에 대한 솔루션이 제안했다.

    믈라덴 Prajdic는 좋은 작품 "XMLNAMESPACES과"에 대한 솔루션이 제안했다.

    http://itknowledgeexchange.techtarget.com/sql-server/using-xmlnamespaces-within-a-function/

  4. ==============================

    4.나를 위해 작동하지 않습니다.

    나를 위해 작동하지 않습니다.

    내 경우에는 내가 테이블 반환 사용자 정의 함수의 RETURN 절 내에서 CTE 값을 사용하고 있습니다. 내가 BEGIN-END에서 RETURN 절을 포장하면 저도 같은 오류 메시지가 있지만, 베어 RETURN () 절은 괜찮 작동합니다. 나는 오류 메시지가이 경우 잘못된 생각합니다.

    이 작품 :

    CREATE FUNCTION [dbo].[ft_SplitStringOnChar]
          (
          @s varchar(8000),
          @sep char(1)
          )
    
    RETURNS TABLE
    AS
    
    RETURN (
        WITH Pieces(pn, start, stop) AS (
          SELECT 1, 1, CHARINDEX(@sep, @s)
          UNION ALL
          SELECT pn + 1, stop + 1, CHARINDEX(@sep, @s, stop + 1)
          FROM Pieces
          WHERE stop > 0
        )
        SELECT pn AS TokenNumber,
          SUBSTRING(@s, start, CASE WHEN stop > 0 THEN stop-start ELSE 512 END) AS TokenString
        FROM Pieces
      )
    
    GO  
    
    This does not:
    
    CREATE FUNCTION [dbo].[ft_SplitStringOnChar]
          (
          @s varchar(8000),
          @sep char(1)
          )
    
    RETURNS TABLE
    AS
    BEGIN
    ;
    RETURN (
        WITH Pieces(pn, start, stop) AS (
          SELECT 1, 1, CHARINDEX(@sep, @s)
          UNION ALL
          SELECT pn + 1, stop + 1, CHARINDEX(@sep, @s, stop + 1)
          FROM Pieces
          WHERE stop > 0
        )
        SELECT pn AS TokenNumber,
          SUBSTRING(@s, start, CASE WHEN stop > 0 THEN stop-start ELSE 512 END) AS TokenString
        FROM Pieces
      )
    END
    GO  
    
  5. from https://stackoverflow.com/questions/1439123/incorrect-syntax-near-the-keyword-with-previous-statement-must-be-terminated by cc-by-sa and MIT license