1. GO
MS SQL에서 GO는 일괄처리 batch의 단위라고 볼 수 있다.
매번 한줄 한줄 명령어를 실행할 때마다 데이터베이스에 접속해서 왔다 갔다 하면 처리시간도 많이 걸리고 효율적이지 못하다. 따라서 큰 덩어리 단위로, 묶음 단위로 처리할 것을 묶어서 보내주는 batch라는 개념이 나오게 된다. GO는 그 구분점 역할을 한다.
예를 들어, CREATE TABLE 문을 실행해서 테이블을 만들었다고 하자.
그런데 이 밑에 바로 INSERT 문을 사용해서 해당 테이블에 데이터를 넣으면 에러가 나올 것이다.
일괄처리로 한번에 처리하려 하는데 한쪽에서는 테이블을 만들고 옆에서는 아직 생성중인 테이블에 바로 데이터를 넣으려고 하기 때문이다. 이때 GO를 사용하면 에러가 발생하지 않습니다.
2. GO의 분류
독립적인 명령어로써 SQL문처럼 보이지만 사실 SQL이 아니다.
마이크로 소프트가 독자적으로 확장한 Transact-SQL도 아니다.
하기의 세 가지 툴에서 쓰이는 tool용 명령어이다.
3. GO가 쓰이는 TOOL 종류
- SQL cmd 유틸리티
- OSQL 유틸리티
- SQL Server Management Studio의 코드 편집기
4. GO의 특징
이전에 쓰인 GO 다음부터 현재 GO 앞까지를 실행한다.
따라서 여기서 중요한 것이, 변수의 선언의 문제이다. 이전에 선언한 변수 뒤에 GO가 들어왔으면 리셋되어버린다.
뒤에서 해당 변수를 다시 사용하고 싶다면 GO 뒤에 다시 선언해 줘야 한다.
DECLARE @num int
go
SET @num = 10
예를 들어 다음과 같이 실행하면 에러가 발생합니다. num은 go위에서 정의되었는데 go를 사용함으로써 일괄처리가 끝나고 다시 새로운 일괄처리가 시작되기 때문에 SET @num =10 시점에서는 num변수가 정의되지 않았습니다.
5. GO 사용 예시
SELECT * FROM 테이블1
GO
SELECT * FROM 테이블2
GO
예를 들어 다음과 같이 GO로 구분되면 한꺼번에 두 개의 문장을 실행하였다고 하더라도, 두 개의 문장은 별도의 배치로 실행됩니다.
SELECT * FROM 테이블1
SELECT * FROM 테이블2
GO
하지만 다음과 같이 GO로 구분하지 않으면, 두 개의 문장은 하나의 배치로 한꺼번에 실행됩니다.
배운 점
MSSQL에서 GO를 왜 사용하는지 공부할 수 있었습니다.
본 글은 아래 링크의 내용을 참고하여 학습한 내용을 나름대로 정리한 글임을 밝힙니다.
https://police84.tistory.com/76
https://aubreyjeong.tistory.com/entry/MS-SQL%EC%9D%98-GO-%EC%9D%98-%EC%9D%98%EB%AF%B8
'DataBase' 카테고리의 다른 글
[MSSQL] 트랜잭션과 @@TRANCOUNT (0) | 2022.02.25 |
---|---|
[MSSQL] 프로시저 (PROCEDURE) (0) | 2022.02.24 |
[MySQL] CHAR, VARCHAR 차이점 + TEXT (2) | 2022.02.24 |
[MySQL] select 0 from A (select 1 from A) (0) | 2022.02.23 |
[MySQL] 기초 문법 정리 (0) | 2022.02.15 |