programing

SQL Server Management Studio & Transact SQL에서 GO를 사용하는 이유는 무엇입니까?

starjava 2023. 4. 7. 20:48
반응형

SQL Server Management Studio & Transact SQL에서 GO를 사용하는 이유는 무엇입니까?

SQL Server Management Studio에서 마우스 오른쪽 버튼을 클릭하여 "스크립트 이름" 메뉴를 사용하여 쿼리를 만들 때 항상 GO 명령을 삽입합니다. 이유는 무엇입니까?GO가 실제로 하는 일은?

터미네이터이지만 대로 할 수 .alt 텍스트

부터는 Management Studio 2005를 할 수 것 .GO an int다음과 같이 합니다.

INSERT INTO mytable DEFAULT VALUES
GO 10

으로 되어 있습니다.mytable. 일반적으로 는 관련된 sql 명령어를 여러 번 실행합니다.

GO 명령어는 Transact-SQL 문이 아니라 SQL Server Management Studio 코드 에디터를 비롯한 여러 MS 유틸리티에서 인식되는 특수 명령어입니다.

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

상세한 것에 대하여는, http://msdn.microsoft.com/en-us/library/ms188037.aspx 를 참조해 주세요.

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

클라이언트 도구(SSMS 등)가 스크립트 전체를 배치로 분할하기 위해 사용하는 배치 구분자입니다.

몇 번인가 전에 대답...예 1

, 뷰를 때 이 할 수 있습니다.go 않으면 'CREATE VIEW' must be the only statement in the batchsql이 없으면 할 수 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

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

Select * from employees;
GO    -- GO 1

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

위의 예에서 GO 1 이전의 문은 일괄적으로 sql server로 전송되고 GO 2 이전의 다른 문은 다른 배치의 sql 서버로 전송됩니다.그래서 우리가 보고 있는 것처럼 그것은 배치로 나뉘어져 있다.

용 the the the를 .GOcommitted다른 쿼리로 넘어갑니다.

가지 덧붙일 수 있는 것은, 그 전에 몇 가지 변수가 선언되어 있는 경우입니다.GO할 수 없습니다.GO 즉, 명령어, 명령어,

DECLARE @dt DateTime = GETDATE();
UPDATE MyTable SET UpdatedOn = @dt where mycondition = 'myvalue';
GO

-- Below query will raise an error saying the @dt is not declared.
UPDATE MySecondTable SET UpdatedOn = @dt where mycondition = 'myvalue'; -- Must declare the scalar variable "@dt".
GO

갱신하다

요, 언제 Go라는 을 했어요Go명령어를 사용합니다.

테이블에 큰 업데이트가 있을 때 보통 퇴근 중에 업데이트를 실행할 때(즉, 쿼리를 감시하지 않을 수 있습니다), 다음날에 와서 다른 작업에 사용할 수 있는 테이블을 찾는 것이 편리하기 때문입니다.

용 i i i i를 쓴다.Go는 긴 을 수행해야 할때같이 해야 할 때 합니다.

-- First Query
Update MyBigTable1 SET somecol1='someval1' where somecol2='someval2'
GO
-- Second Query
Update MyBigTable2 SET somecol1='someval1' where somecol2='someval2'
GO
-- Third Query
Update MyBigTable3 SET somecol1='someval1' where somecol2='someval2'

위의 쿼리를 실행하면 대규모 롤백로그가 생성되지 않고 개별적으로 변경이 커밋됩니다.또한 세 번째 쿼리에서 오류가 발생한 경우 처음 두 개의 쿼리가 올바르게 실행되어 롤백되지 않습니다.따라서 이전에 실행된 쿼리에 대한 레코드를 다시 업데이트/삭제하는 데 더 많은 시간을 할애할 필요가 없습니다.

문장으로 요약하면, "나는 이 모든 것들을GO이렇게 하다'체크포인트(GO 명령) 후 실패하면 게임을 다시 시작할 필요가 없으며 마지막 체크포인트부터 시작합니다.

Use herDatabase
GO ; 

있습니다.GO마커를 클릭합니다.이므로 myDatabase를 사용하는 myDatabase를 합니다.myDatabase GO 현재 를 사용합니다.

목록에는 없는 사용법이 오류 복원력입니다.한 번에 실행되는 것은 2개의 GO 사이의 명령어뿐이므로 한 명령어 내의 컴파일오류를 다른 명령어와 분리할 수 있습니다.일반적으로 일괄적으로 컴파일 오류가 발생하면 전체 작업이 실행되지 않습니다.

exec do.Something
GO
sel from table
print 'here'
GO
print 'there'

위에서는 'sel' 문장의 오류로 인해 '여기'가 인쇄되지 않습니다.

이제 중간에 Go를 추가합니다.

exec do.Something
GO
sel from table
GO
print 'here'
GO
print 'there'

이전과 같이 'sel'에 대한 오류가 표시되지만 '여기'는 출력됩니다.

tldr; 오늘날 대부분의 경우 GO는 IMO 옵션입니다.GO를 사용하는 것은 대규모 트랜잭션 배치에서 최적의 방법입니다.대규모 스크립트로 많은 다른 스크립트를 컴파일하여 유사한 변수를 사용하는 경우 오류가 발생하지 않도록 하고 트랜잭션의 일부를 필요에 따라 서버에 커밋하는 것이 좋습니다.이 경우 오류로 인해 모든 스크립트가 롤백되는 것이 아닙니다.

LARGE TRANSION 1 --> 정상적으로 실행

GO; --> 서버에 있습니다.

LARGE TRANSION 2 --> 정상적으로 실행

GO; --> 서버에 있습니다.

LARGE TRANSION 3 --> 오류

GO; --> 다른 GO 스테이트먼트가 없으면 트랜잭션1과 2가 롤백 됩니다


이것을 현명하게 제공할 수 있는 최선의 방법은 확실하지 않지만, 내가 지금까지 읽은 것은 실제로 모든 것을 요약하고 내가 접한 예를 포함하고 있지 않다고 생각한다.

앞서 여러 번 언급했듯이, GO는 단순히 명령어 배치를 서버에 "커밋"합니다.

세션을 이해하는 것도 GO 스테이트먼트의 필요성(또는 옵션성)을 이해하는 데 도움이 된다고 생각합니다.

(이것이 저의 기술성이 실패할 수 있지만 커뮤니티에서 지적하고 이 답변을 개선할 수 있는 부분입니다.)

일반적으로 개발자는 단일 세션에서 작업하며 일반적으로 데이터베이스에 대한 간단한 문구를 실행합니다.이 시나리오에서는 GO는 옵션이며 실제로...진술이 끝날 때 그냥 던져버리는 것 뿐이죠

Jamshaid K가 제공하는 옵션이 도움이 될 것입니다.이 옵션에서는, 1개의 트랜잭션이 실패했을 때에 모든 트랜잭션을 롤백 하는 대신에, 많은 대규모 트랜잭션을 차례차례 커밋할 수 있습니다.

이것이 도움이 되는 또 다른 시나리오는 많은 작은 트랜잭션이 하나의 큰 스크립트로 컴파일되는 것입니다.예를들면

Dev 1이 스크립트1을 작성

Dev 2는 스크립트 2를 작성

Dev 1이 스크립트 3을 작성

이러한 스크립트를 배포하기 위해 스크립트 결합을 위해 python 스크립트를 작성하여 Script Master = script1 + script 2 + script 3을 작성합니다.

3개의 스크립트에 GO 문이 필요합니다.그렇지 않으면 스크립트가 모순되는 변수를 사용하거나 스크립트3이 실패하면 스크립트1과 스크립트2로부터의 트랜잭션이 롤백 됩니다.

현재의 CI/CD 솔루션을 고려하면 이 프로세스는 구식이지만, GO가 도움이 되고 기대되는 또 다른 시나리오가 될 수 있습니다.

GO는 SQL 옆에 추가하는 숫자에 관계없이 이 작업을 반복하도록 요청하는 것입니다.영어로 "Hey GO There 3번"이라고 말하는 것처럼.아래 SQL에서 시도하면 렌더링 테이블이 3번 나타납니다.

    SELECT * FROM Table
    GO 3

쿼리를 분리하는 명령어입니다.여러 번 선택해도 큰 차이는 없습니다.예를 들어 스크립트를 작성할 때 스토어드 프로시저를 작성하거나 액세스 권한을 부여하거나 실행한 후에 스크립트를 작성해야 합니다.예를 들어 다음과 같습니다.

CREATE OR ALTER PROCEDURE dbo.select1
AS
BEGIN
    SET NOCOUNT ON
        
    SELECT 1
END

EXEC dbo.select1

이 예에서는 EXEC을 포함한 모든 것을 포함한 스토어드 프로시저가 작성되어 루프가 됩니다.따라서 GO는 마지막에 저장된 proc를 생성하고 실행한 후라고 표시됩니다.

CREATE OR ALTER PROCEDURE dbo.select1
AS
BEGIN
    SET NOCOUNT ON
        
    SELECT 1
END
GO
EXEC dbo.select1

언급URL : https://stackoverflow.com/questions/2299249/what-is-the-use-of-go-in-sql-server-management-studio-transact-sql

반응형