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(구조 질의어)에 기능을 확장한 것이다.
T-SQL은 마이크로소프트에서 만든 SQL의 확장 기능이라고 한다. 예문을 살펴보니 SSMS에서 사용할 수 있었던 IF~ELSE, BEGIN~END, TRY~CATCH 등 SQL에서도 프로그래밍 언어처럼 제어문을 사용할 수 있게 해준게 모두 T-SQL 덕분이었던 것 같다.
더 정확하게 알아보기 위해 GO 명령문에 관련한 MS의 SQL Server 2019 정식 설명문을 참고했다.
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판(박우창, 남송휘, 이현룡/ 한빛아카데미)
댓글