SQL 배치, 명령문 및 RPC의 차이점은 무엇입니까?


35

SQL 배치, T-SQL 문 및 원격 프로 시저 호출의 차이점은 무엇입니까?
T-SQL 코드의 일부가 배치 또는 명령문인지 어떻게 알 수 있습니까?

답변:


25

글쎄, 나는 당신이 주로 프로파일 러 수업에 대해 이야기한다고 가정하지만 설명은 어쨌든 유효합니다.

SQL 배치는 하나 이상의 명령문으로 묶여 있으며 GO 문으로 구분됩니다. EG : 더 많은 SELECT 및 INSERT 문은 끝에 GO가 있으면 배치를 형성합니다.

RPC 호출은 클라이언트 응용 프로그램에서 데이터베이스로 들어오는 호출입니다. EG : Windows 서비스, 웹 응용 프로그램, Windows 응용 프로그램 등 데이터베이스에 연결해야 할 경우 실제로 RPC 호출을 수행합니다.

이제 프로파일 러에는 데이터베이스 서버에 닿는 모든 것이 표시됩니다. Management Studio의 일괄 처리, 외부 응용 프로그램의 RPC 호출 (일괄 처리 또는 저장 프로 시저 호출), Management Studio의 프로 시저 실행

이들 각각은 TSQL 문으로 구성되므로이 Profiler 클래스는 실행을 더 확장하여 실제로 실행 된 것을 확인하려는 경우에 유용합니다. 삽입, 선택 등

Profiler에서 가장 쉽게 볼 수있는 방법은 End RPC call 또는 End batch call 만 활성화하는 것입니다. 필요한 모든 통계 (지속 시간, IO, CPU)가 표시됩니다. 그런 다음 TSQL Statements 클래스를 사용 가능하게하여 더 깊이 파고들십시오.


4
+1 GO우리가 사용하는 인기있는 클라이언트 (예 : SSMS 및 sqlcmd)의 승인 된 기본 배치 종결자는 지정하기 만하지만 GO배치 종결 자로 사용되는 실제 문자열은 변경하기 쉽고 구성 가능 하다는 점에 주목할 가치 가 있습니다.
Thomas Stringer 2013

1
"RPC 호출 (일괄 처리 또는 저장 프로 시저 호출)" . 결국 모든 것이 RPC입니까? 당신은 그것을 명확히 할 수 있습니까?
Iain Samuel McLean Elder

아니요, RPC 호출은 저장 프로 시저 호출 또는 더 많은 문으로 구성되어 있다고 말하고 싶습니다. 이 프로파일 러 이벤트에서 실제로 볼 수있는 것은 단일 프로 시저 또는 일련의 추가 명령문입니다.
Marian

여기에 몇 가지 설명을 참조 하십시오 . 다른 정보는 여기에 있습니다 .
Marian

14

배치 대 T-SQL 문

이것은 SQL Server BOL에 명확하게 정의되어 있습니다.

일괄 처리는 응용 프로그램에서 SQL Server로 동시에 전송되어 실행되는 하나 이상의 Transact-SQL 문의 그룹 입니다. Go 는 SSMS를 포함한 대부분의 클라이언트 응용 프로그램에서 사용되는 배치 구분 기호입니다.

SQL Server는 배치 문을 실행 계획이라는 단일 실행 단위로 컴파일합니다. 그런 다음 실행 계획의 문은 한 번에 하나씩 실행됩니다.

내 이해 RPC를 기반으로 한 간단한 용어는 클라이언트 API를 사용하여 저장 프로 시저를 실행할 때입니다 (예 : ADO.net CommandObject. Execute 메서드)

자세한 내용은 다음 인터넷 뉴스 그룹 중 하나에 나와 있습니다 .

RPC "대"batch "는 ADO.NET (또는 모든 SQL Server 클라이언트)이 사용하는 TDS 실행 모드입니다. 매개 변수가없는 일반 SQL 문이 실행될 때"배치 "를 사용합니다. 저장 프로 시저가 실행될 때, RPC를 사용합니다 (이것은 독립형 네트워크 원격 프로 시저 호출과 RPC와 동일하지 않으며 TDS (SQL Server 네트워크 프로토콜)에서이 모드 RPC를 호출하기 만합니다). 실제로 sp_executesql이라는 저장 프로 시저를 사용하고 SQL 문 자체와 나머지 매개 변수를 전달하므로 RPC로 표시됩니다.

Pablo Castro
프로그램 관리자-ADO.NET 팀
Microsoft Corp.


따라서 배치의 한 명령문이 실패하면 전체 배치가 자동으로 롤백됩니까?
MonsterMMORPG

배치가 활성 트랜잭션 내에 있거나 IMPLICIT_TRANSACTIONS ON을 설정하지 않으면 배치의 각 명령문이 자동으로 커밋됩니다. 배치와 트랜잭션은 서로 다른 개념입니다. 나는 그 질문이 매우 오래되었다는 것을 알고 있습니다. 나는 미래 독자들을 위해 여기에 남겨두고 있습니다.
spaghettidba
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.