2011-03-07 3 views
7

그래서 여러 번 with을 보이고, 너무 여러 번 SQL 서버로가 가지고있는 질문 ; 전에 그것을"With"키워드는 SQL에서 어떻게 작동합니까?

어떻게 ;with ... 작업을 수행 ??

;with coords(...) as (
SELECT * ... 
) 

왜 앞에 ;이 있어야합니까?

+0

당신은 \t ON, STATISTICS_NORECOMPUTE = OFF \t, IGNORE_DUP_KEY = OFF \t, ALLOW_ROW_LOCKS = \t, ALLOW_PAGE_LOCKS = ON이 볼 수 있어야합니다)'을 사용하면 공통 테이블 표현식과 함께'with' 키워드를 여러 가지 문맥 적으로 사용하게됩니다. 세미 콜론은 쿼리를 구문 분석하는 동안 SQL Server의 마음에 잠길 수있는 혼란을 피합니다. – RBT

답변

14

세미콜론은 쿼리를 끝내기 위해 SQL에서 사용됩니다. 이와 같은 쿼리 앞에 놓는 것은 이전 쿼리가 종료되었다는 것을 데이터베이스가 이해하고 있는지 확인하는 것입니다.

원래 각 줄마다 한 줄씩 입력 할 때마다 줄 바꿈이 필요했기 때문에 데이터베이스는 언제 쿼리를 실행할지를 알아야했습니다. 전체 쿼리가 단일 문자열로 전송되면 SQL 구문이 쿼리가 끝나는 위치를 결정하기에 충분하지 않은 경우 세미콜론 만 있으면됩니다. with 키워드가 다른 용도로 사용되기 때문에 이전 쿼리의 일부가 아닌지 확인하기 전에 세미콜론을 사용해야 할 수도 있습니다.

1

WITH의 사용은 공통 테이블 식 (CTE를)위한입니다. 그들은 CTE를 첫 번째 문으로 정의하려고했습니다 (즉, 쿼리의 다른 부분과 연결할 수 없음).

2

모든 SQL 문을 세미콜론으로 종료하는 것이 가장 좋습니다. SQL Server 문서 (예 : here)는 향후 버전에서 위임 될 것이므로 버릇이 생겨날 수 있다는 변명의 여지가 없다고 제안합니다.

대답하는 사람은 대답하는 사람이 엉성한 코더이거나 응답자가 질문하는 사람이 실수 한 코더라고 가정하기 때문에 Stackoverflow에 ;WITH...을 볼 수 있습니다. (그리고 그들은 그럴 때 후자라고 주장 할 것입니다. 이전 : :) "조잡한 코더"의 정의는 세미콜론을 강요 할 때만 사용하는 사람입니다. = OFF \t ( \t PAD_INDEX와 함께 \t 당신의 테이블`에 제약을 작성하는 동안

+0

Transact-SQL 구문 표기 규칙 (http://msdn.microsoft.com/en-us/library/ms177563.aspx) "Transact-SQL 문 종료 자이 버전의 SQL Server에서 대부분의 문에는 세미콜론이 필요하지 않지만, 그것은 향후 버전에서 필요할 것입니다. " –

관련 문제