본문 바로가기
카테고리 없음

[SQL SERVER] GO

by 라이프리 2021. 9. 5.

 GO?

책을 보다가 GO라는 명령어를 접했다. 사실 개발실무자가 된 뒤로 SSMS에서 기존 테이블 분석을 위해 소스 복사를 할때 많이 봤던 문법이다. 샘플로 돌릴때는 이걸 써도 안써도 딱히 문제가 없었기 때문에 알아보지 않았는데, 생각보다 너무 많이 나와서 알아봐야겠다.

USE [MASTER]

CREATE DATABASE Madang
GO
....

....
INSERT INTO Orders VALUES (10, 3, 8 ...);
GO

책의 설명에는 이렇게 나와있다.

-- GO 명령어는 T-SQL 문은 아니지만 현재까지 명령어를 SQL Server에 보내서 실행시키는 역할을 한다.
-- 즉 GO 명령어는 명령어를 묶어서 배치로 서버에 보내는 역할을 한다.

뭔가 자바 SQLMAP의 TRANSACTION과 비슷하다는 생각이 든다.

그런데 T-SQL은 또 뭘까?

 T-SQL

 

 

트랜잭트 SQL(Transact-SQL, T-SQL)은 마이크로소프트와 사이베이스가 SQL(구조 질의어)에 기능을 확장한 것이다.
 

SQL - 위키백과, 우리 모두의 백과사전

이 도표는 단문을 구성하는 SQL 언어 요소 몇 가지를 보여준다. SQL(,[1] or , Structured Query Language[2][3][4][5], 구조화 질의어, S-Q-L[6])는 관계형 데이터베이스 관리 시스템(RDBMS)의 데이터를 관리하기 위

ko.wikipedia.org

T-SQL은 마이크로소프트에서 만든 SQL의 확장 기능이라고 한다. 예문을 살펴보니 SSMS에서 사용할 수 있었던 IF~ELSE, BEGIN~END, TRY~CATCH 등 SQL에서도 프로그래밍 언어처럼 제어문을 사용할 수 있게 해준게 모두 T-SQL 덕분이었던 것 같다.

 

더 정확하게 알아보기 위해 GO 명령문에 관련한  MS의 SQL Server 2019 정식 설명문을 참고했다.

 

SQL Server 유틸리티 문 - GO - SQL Server

SQL Server 유틸리티 문 - GO

docs.microsoft.com

 

GO는 Transact-SQL 문이 아니라 sqlcmd 및 osql 유틸리티와 SQL Server Management Studio 코드 편집기에서 인식되는 명령입니다.

GO는 SQL문도 아니고(문법에서 못배웠으니까!) T-SQL문이 아니며 MS사의 편집기인 SSMS 등에서 사용 가능한 편집기 명령어라고 한다. 

 

 GO의 역할

GO 명령어는 간단하게 말해서 이전 GO~GO 명령어 사이에있는 SQL문을 하나의 트랜잭션으로 묶어 실행하는 기능을 한다.

-- GO 예제
SELECT 'Batch 1' AS '1';
-- 첫번째 GO
GO

SELECT 'BATCH 2' AS '2';
-- 두번째 GO
GO 2

첫번째 GO는 첫문장 (SELECT~) 부터 첫번째 GO 위치까지 SQL문을 트랜잭션으로 묶는다. 

두번째 GO는 첫번째 GO 이후~ 두번째 GO 앞까지의 SQL문을 트랜잭션으로 묶는다.

재미있는건 GO 2라고 입력한 부분인데, INTEGER로 입력할 수 있고 해당 숫자만큼 GO로 묶은 트랜잭션이 반복된다.

 

<실행화면>

GO 2라고 입력한 트랜잭션이 두 번 실행된 것을 볼 수 있다.

 

참고: SQL Server로 배우는 데이터베이스 개론과 실습 2판(박우창, 남송휘, 이현룡/ 한빛아카데미)

댓글