2014-10-22 1 views
1

나는 GO는 일괄 처리를 종료하고SQL 지연을 방지하기 위해 GO를 사용 하시겠습니까?

ALTER TABLE tableName ADD name VARCHAR(20) 
GO -- this GO will make sure that "name" will be added before the select statement 
SELECT name FROM tableName 

같은 것들을 제어 할뿐만 아니라 지연 문제를 방지 할 수 갈 수있는 SQL에 사용되는 것을 알고?

DECLARE @countID int 
SELECT @countID = COUNT(id) FROM Usuer -- this table has milions of registers and takes a while to be executed 

--GO 

SELECT @countID, Name FROM Something 

SQL 서버는 이미 첫 번째 선택을 기다리는 예는 내가 두 번째 선택이 첫 번째 한 후에 실행되도록 보장하기 위해 두 문장 사이의 GO를 넣어 마무리 한 다음 두 번째 선택을 시작하거나해야합니다 ?

감사

+5

SQL Server는 그 사이에'이동 '이 있는지 여부에 관계없이 명령문을 순서대로 실행합니다. –

+0

"* GO는 SQL *에서 사용됩니다."는 정확히 사실이 아닙니다. 'GO '는 SQL Server ** Management Studio **에서 배치를 종료하는 데 사용됩니다. 이것은 SQL 언어 (표준 SQL이나 T-SQL은 아님)의 일부가 아닙니다. –

+0

사이드 노트, 지연을 원할 경우 [WaitFor] (http://msdn.microsoft.com/en-us/library/ms187331.aspx)를 사용하지만 하나의 쿼리 창이 항상 순서대로 실행되며 대기합니다 이전 명령을 완료하십시오. 병렬 실행이 필요하다면 (필자는 그렇게 생각하지 않습니다.) [병렬 실행 중 -save-procedures-in-job-sql-server]를 볼 수 있습니다 (http://stackoverflow.com/questions/). 23150109/ – AWinkle

답변

1

GO은 관리 Studio, SQL하지 서버의 문입니다. 서버로 전혀 보내지지 않습니다.

대신 GO 사이의 전체 쿼리는 하나씩 다른 명령으로 전송됩니다. 쿼리를 분석하고 구조를 수정할 수없는 방식으로 계획했기 때문에 GO을 사용해야하는 이유가있었습니다. 테이블에 열이 아직 없기 때문에 계획을 세울 수 없었습니다. 이것은 더 이상 MS SQL의 경우는 아닙니다.

서버와의 통신이 더 많이 필요하다는 것 외에는 지연이나 아무것도하지 않습니다.

+0

예제의 경우 병렬 저장 프로 시저에서 저장 프로 시저 실행 중 하나에 오류가있는 경우 "GO"는 다른 명령문이 실행되도록합니다. 내가 틀렸다면 나를 바로 잡아라. –

+0

@ankk 실제로. 물론 당신을 심하게 물지 수 있습니다. 다른 차이점도 있습니다. 모두 명령이 별도의 명령으로 실행된다는 사실과 관련이 있습니다. – Luaan

관련 문제