SQL Server Management Studio 및 Transact SQL에서 GO를 사용하는 것은 무엇입니까?


363

SQL Server Management Studio는 마우스 오른쪽 단추로 "다른 이름으로 스크립트"메뉴를 사용하여 쿼리를 만들 때 항상 GO 명령을 삽입합니다. 왜? GO는 실제로 무엇을합니까?



29
@ChrisF-중복 된 것은 아니지만 허용되는 답변도이 질문에 대한 답변입니다. 이 질문은 트랜잭션에서 "GO"를 사용하는 것에 관한 것입니다. 실제로 SQL 명령이 아니라는 것이 밝혀졌습니다. 이 질문은 훨씬 더 일반적이며 SSMS의 GO 명령에 대한 질문에 대한 명확한 답변을 제공하려고합니다.
tvanfosson 2019

3
이 링크를 살펴보십시오. 배치 문은 무엇입니까?
Zain Rizvi

Microsoft 설명서 : SQL Server 유틸리티 문-GO : GO 앞의 배치가 지정된 횟수만큼 실행됩니다.

답변:


304

배치 종결 자이지만 원하는대로 변경할 수 있습니다. 대체 텍스트


80
GBN은 SELECT 무슨 일이 일어나는지에 보이게 :-)
SQLMenace

14
감사! 그러나 GO 문의 요점은 무엇입니까? 이것은 어리석게 들릴 수 있지만 '일괄 코드'는 무엇을 의미합니까? msdn 은 GO 후에 변수의 수명이 만료된다고 말합니다. 거래 약속과 아무 관련이없는 것 같습니까? 스크립트에 GO 문을 보관해야하는 상황이 있습니까?
kate1138

4
이는 모든 T-SQL이 "한 번에"실행됨을 의미합니다. 내가 이해 한 바에 따르면 세미콜론 (OLEDB / Oracle)과 호환됩니다. 예를 들어 배치 후 스크립트가 큰 경우 줄 사이에 GO 문이 있으면 스크립트에 사용 된 메모리가 도움이 될 수 있습니다.
Anthony Mason

4
이 답변은 실제로 "실제로하는 일"또는 그 이유를 설명하지 않습니다.
Andrew

@tvanfosson의 답변을 읽은 후 : 실제로 세미콜론과 상호 교환 가능합니까?
WoIIe

299

Management Studio 2005부터 다음 GO과 같은 int매개 변수 와 함께 사용할 수 있습니다 .

INSERT INTO mytable DEFAULT VALUES
GO 10

위의에 10 개의 행이 삽입됩니다 mytable. 일반적으로 말하면 GO관련 SQL 명령 n시간을 실행합니다 .


199

GO 명령은 Transact-SQL 문이 아니지만 SQL Server Management Studio 코드 편집기를 비롯한 여러 MS 유틸리티에서 인식되는 특수 명령입니다.

GO 명령은 SQL 명령을 배치로 그룹화하여 서버로 함께 전송하는 데 사용됩니다. 배치에 포함 된 명령, 즉 마지막 GO 명령 또는 세션 시작 이후의 명령 세트는 논리적으로 일관성이 있어야합니다. 예를 들어 변수의 범위가 정의 된 배치로 제한되므로 한 배치에서 변수를 정의한 다음 다른 배치에서 사용할 수 없습니다.

자세한 내용은 http://msdn.microsoft.com/en-us/library/ms188037.aspx를 참조 하십시오 .


37
어떤 상황에서 GO실제로 배치하는 것이 유용한가?
nicodemus13


4
따라서 배치의 1 개 문이 실패하면 모두 실패합니까?
MonsterMMORPG

36

GO는 SQL 키워드가 아닙니다.

SSMS와 같은 클라이언트 도구에서 전체 스크립트를 일괄 처리하기 위해 사용하는 배치 구분 기호입니다.

여러 번 대답하기 ... 예 1


4
내 방어에서 나는 질문을 제출하기 전에 제안 된 복제본을 살펴 보았습니다. 답이 적용 가능하지만 예제가 표시되지 않았거나 실제로 복제본도 아닙니다.
tvanfosson 2019

26
여기에서 "GO"를 찾기가 어렵습니다 :-)
gbn

20

기존 답변에 추가하기 위해보기를 만들 때을 사용하여 이러한 명령을 일괄 처리로 분리해야합니다 go. 그렇지 않으면 오류가 발생 'CREATE VIEW' must be the only statement in the batch합니다. 예를 들어, 다음 SQL 스크립트를 실행하지 않으면 다음과 같은 SQL 스크립트를 실행할 수 없습니다.go

create view MyView1 as
select Id,Name from table1
go
create view MyView2 as
select Id,Name from table1
go

select * from MyView1
select * from MyView2

또한 절차 생성
Luciano Santos

2
이것은 OP 질문의 첫 부분 인 "... 항상 GO 명령을 삽입합니다 .... 왜?"를 해결하는 유일한 대답입니다. 대부분의 경우 두려움이없는 것 같습니다. 필요한 시간은 명령이 자체 배치에 있어야하는 경우입니다.
bielawski

7

Go는 이전 및 이후 GO 이후에 작성된 모든 SQL 문이 처리를 위해 SQL Server로 이동 함을 의미합니다.

Select * from employees;
GO    -- GO 1

update employees set empID=21 where empCode=123;
GO    -- GO 2

위의 예에서 GO 1 이전의 명령문은 배치에서 sql 서버로 이동 한 다음 GO 2 이전의 다른 명령문은 다른 배치에서 SQL Server로 이동합니다. 보시다시피 배치가 분리되었습니다.


5
Use herDatabase
GO ; 

코드는 GO마커 위의 명령을 실행하라는 메시지를 표시합니다. 내 기본 데이터베이스는 myDatabase이므로 herDatabase를 사용 myDatabase GO하고 현재 쿼리를 사용하는 대신


-8

여기 GO의 마법이 있습니다.

SELECT 'Go'
Go 10

신택스 : INT(BatchNumber)

배치 번호 : 발생 횟수 없음

더 깊이 코딩하면 스파게티로 이어질 수 있습니다 .


이것은 배치 스크립트와 같이 프로그래밍에 사용되는 GOTO 문을 설명하려고 시도합니다. SQL Server의 GO 문과는 관련이 없습니다. 배치 N을 여러 번 처리하려면 GO를 일반적으로 INT와 함께 사용하지 않습니다. 따라서 아니요, GO의 "마법"이 아닙니다. 다른 답변에서 설명한 것처럼 스크립트를 일련의 그룹화 된 실행으로 분리하는 데 사용됩니다.
Heriberto Lugo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.