Różnica między partią SQL, instrukcją i RPC?


35

Jaka jest różnica między wsadem SQL, instrukcją T-SQL a zdalnym wywołaniem procedury?
Jak mogę sprawdzić, czy część kodu T-SQL jest partią czy instrukcją?

Odpowiedzi:


25

Cóż, przypuszczam, że mówisz głównie o klasach Profiler, ale wyjaśnienie i tak jest ważne.

Partia SQL to zestaw jednej lub więcej instrukcji zgrupowanych razem i oddzielonych instrukcją GO. EG: więcej instrukcji SELECT i INSERT tworzy partię, jeśli na końcu ma GO.

Wywołanie RPC to połączenie przychodzące z aplikacji klienckiej do bazy danych. EG: usługa Windows, aplikacja internetowa, aplikacja Windows, cokolwiek wymaga połączenia z bazą danych, faktycznie wykonuje wywołanie RPC.

Teraz w Profiler zobaczysz wszystko, co dotyka serwera bazy danych. Partia z Management Studio, wywołanie RPC (które jest albo pakietem lub wywołaniem procedury składowanej) z zewnętrznej aplikacji, wykonanie procedury z Management Studio.

Każda z nich składa się z instrukcji TSQL, więc ta klasa Profiler jest przydatna na wypadek, gdybyś chciał rozszerzyć wykonanie, aby zobaczyć, co faktycznie zostało wykonane. Co wstawia, wybiera ... itd.

Najłatwiejszym sposobem na obejrzenie ich w Profiler jest włączenie tylko End End RPC lub End batch call, a zobaczysz tam wszystkie potrzebne statystyki (czas trwania, IO, procesor). Następnie przejdź dalej, włączając klasę instrukcji TSQL i kop głębiej.


4
+1 Wystarczy sprecyzować, że GOjest akceptowanym i domyślnym terminatorem wsadowym popularnych klientów, których używamy (tj. SSMS i sqlcmd), ale warto zauważyć, że rzeczywisty GOciąg jako terminator wsadowy może ulec zmianie i można go konfigurować.
Thomas Stringer

1
„Wywołanie RPC (które jest albo wywołaniem partii lub procedury składowanej)” . Więc w końcu wszystko jest RPC? Czy możesz to wyjaśnić?
Iain Samuel McLean Starszy

Nie, chciałem powiedzieć, że wywołanie RPC składa się albo z wywołania procedury składowanej, albo z szeregu kolejnych instrukcji. To, co faktycznie widzisz w tym zdarzeniu Profiler, to albo pojedyncza procedura, albo partia więcej instrukcji.
Marian,

Zobacz wyjaśnienie tutaj . Kilka innych informacji tutaj .
Marian,

14

Instrukcja Batch vs T-SQL

Jest to jasno określone w SQL Server BOL tutaj

Partia to grupa co najmniej jednej instrukcji Transact-SQL wysłanej w tym samym czasie z aplikacji do programu SQL Server w celu wykonania. Go to separator partii używany w większości aplikacji klienckich, w tym SSMS.

SQL Server kompiluje instrukcje partii w pojedynczą jednostkę wykonywalną, zwaną planem wykonania. Instrukcje w planie wykonania są następnie wykonywane pojedynczo.

W prostym znaczeniu opartym na moim zrozumieniu RPC ma miejsce, gdy wykonujesz zapisany proces przy użyciu interfejsu API klienta (np. W ADO.net CommandObject. Metoda wykonania)

Bardziej szczegółowe wyjaśnienie znajduje się w jednej z internetowych grup dyskusyjnych zamieszczających tutaj :

RPC „vs” partia ”to tryb wykonywania TDS, z którego korzysta ADO.NET (lub dowolny klient SQL Server). Kiedy wykonywana jest zwykła instrukcja SQL bez parametrów, używamy„ partii ”. Gdy wykonywany jest procedura przechowywana, używamy RPC (nie jest to to samo co RPC, co autonomiczne sieciowe zdalne wywołanie procedury, akurat nazywamy ten tryb RPC w TDS (protokół sieciowy SQL Server)). Ponadto, jeśli wykonasz wsad z parametrem, faktycznie używamy przechowywanego proc o nazwie sp_executesql i przekazujemy do niego samą instrukcję SQL oraz resztę parametrów, więc pojawia się ona również jako RPC.

Pablo Castro
Program Manager - zespół ADO.NET
Microsoft Corp.


więc jeśli jedna instrukcja w partii nie powiedzie się, cała partia jest automatycznie wycofywana?
MonsterMMORPG

Nie, każda instrukcja w partii jest zatwierdzana autonomicznie, chyba że partia jest w aktywnej transakcji lub nie ustawisz IMPLICIT_TRANSACTIONS na. Partie i transakcje to dwie różne koncepcje. Wiem, że pytanie jest bardzo stare, pozostawiam to tutaj przyszłym czytelnikom.
spaghettidba
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.