ความแตกต่างระหว่างชุดคำสั่ง SQL และ RPC หรือไม่


35

อะไรคือความแตกต่างระหว่างชุดคำสั่ง SQL, คำสั่ง T-SQL และการเรียกขั้นตอนระยะไกล?
ฉันจะรู้ได้อย่างไรว่าส่วนหนึ่งของรหัส T-SQL เป็นชุดหรือคำสั่ง?

คำตอบ:


25

ฉันคิดว่าคุณกำลังพูดถึงคลาส Profiler เป็นส่วนใหญ่ แต่คำอธิบายนั้นยังคงอยู่

ชุด SQL เป็นชุดของคำสั่งหนึ่งรายการขึ้นไปที่จัดกลุ่มเข้าด้วยกันและคั่นด้วยคำสั่ง GO EG: คำสั่ง SELECT และ INSERT เพิ่มเติมจะสร้างแบตช์หากมี GO ในตอนท้าย

การเรียก RPC เป็นการเรียกที่มาจากแอปพลิเคชันไคลเอนต์ไปยังฐานข้อมูล EG: บริการ windows, เว็บแอปพลิเคชั่น, แอพ windows, อะไรก็ตามที่ต้องการการเชื่อมต่อกับฐานข้อมูลจริง ๆ แล้วทำการโทร RPC

ตอนนี้ใน Profiler คุณจะเห็นทุกสิ่งที่สัมผัสกับเซิร์ฟเวอร์ฐานข้อมูล ชุดจาก Management Studio การเรียก RPC (ซึ่งเป็นชุดหรือการเรียกกระบวนงานที่เก็บไว้) จากแอปพลิเคชันภายนอกการดำเนินการขั้นตอนจาก Management Studio

แต่ละคำสั่งถูกสร้างขึ้นด้วยคำสั่ง TSQL ดังนั้นคลาส Profiler นี้มีประโยชน์ในกรณีที่คุณต้องการขยายการดำเนินการเพิ่มเติมเพื่อดูว่ามีการดำเนินการอะไรบ้าง สิ่งที่แทรกเลือก .. เป็นต้น

วิธีที่ง่ายที่สุดในการดูพวกเขาใน Profiler คือการเปิดใช้งานเฉพาะการเรียก End RPC หรือ End batch call และคุณจะเห็นสถิติทั้งหมดที่จำเป็น (ระยะเวลา, IO, CPU) จากนั้นย้ายต่อไปโดยเปิดใช้คลาส TSQL Statement และเจาะลึกลงไป


4
+1 เพียงเพื่อระบุGOเป็นตัวยุติแบตช์ที่เป็นที่ยอมรับและเป็นค่าเริ่มต้นของไคลเอนต์ยอดนิยมที่เราใช้ (เช่น SSMS และ sqlcmd) แต่มันก็คุ้มค่าที่จะสังเกตว่าGOสตริงที่แท้จริงในฐานะที่เป็นเทอร์มินัลแบตช์นั้น
Thomas Stringer

1
"การเรียก RPC (ซึ่งเป็นการแบตช์หรือการเรียกกระบวนงานที่เก็บไว้)" . ดังนั้นทุกอย่างคือ RPC ในที่สุด? คุณช่วยอธิบายได้ไหม?
เลนซามูเอลแมคลีนเลน

ไม่ฉันต้องการบอกว่าการเรียก RPC เกิดขึ้นจากการเรียกโพรซีเดอร์ที่เก็บไว้หรือแบตช์ของคำสั่งเพิ่มเติม สิ่งที่คุณเห็นจริงในเหตุการณ์ Profiler นี้อาจเป็นเพียงขั้นตอนเดียวหรือเป็นชุดคำสั่งเพิ่มเติม
แมเรียน

โปรดดูคำอธิบายบางอย่างที่นี่ บางข้อมูลอื่น ๆที่นี่
แมเรียน

14

ชุดคำชี้แจง T-SQL

นี่ถูกกำหนดไว้อย่างชัดเจนใน SQL Server BOL ที่นี่

ชุดคือกลุ่มของคำสั่ง Transact-SQL หนึ่งรายการหรือมากกว่าที่ส่งในเวลาเดียวกันจากแอปพลิเคชันไปยัง SQL Server เพื่อดำเนินการ Goเป็นตัวคั่นแบทช์ที่ใช้ในแอปพลิเคชันลูกค้าส่วนใหญ่รวมถึง SSMS

SQL Server รวบรวมคำสั่งของแบทช์ในหน่วยที่ปฏิบัติการได้เดียวซึ่งเรียกว่าแผนการดำเนินการ งบในแผนดำเนินการจะถูกดำเนินการทีละรายการ

ในระยะสั้นตามความเข้าใจของฉัน RPC คือเมื่อคุณรัน proc ที่เก็บไว้โดยใช้ API ไคลเอนต์ (เช่นใน ADO.net CommandObject วิธีการดำเนินการ)

คำอธิบายรายละเอียดเพิ่มเติมสามารถพบได้ในหนึ่งในกลุ่มข่าวอินเทอร์เน็ตโพสต์ที่นี่ :

RPC "vs" batch "เป็นโหมดการดำเนินการ TDS ที่ ADO.NET (หรือไคลเอนต์ SQL Server ใด ๆ ) ใช้เมื่อคำสั่ง SQL ธรรมดาที่ไม่มีพารามิเตอร์ถูกเรียกใช้เราจะใช้" batch "เมื่อจัดเก็บ proc ไว้ เราใช้ RPC (ซึ่งไม่เหมือนกับ RPC เหมือนกับการเรียกโพรซีเดอร์แบบรีโมตเครือข่ายแบบสแตนด์อะโลนเราเพิ่งเรียกโหมดนี้ว่า RPC ใน TDS (โพรโทคอลเครือข่ายเซิร์ฟเวอร์ SQL)) นอกจากนี้หากคุณดำเนินการแบทช์ด้วยพารามิเตอร์ เราใช้ proc ที่เก็บไว้จริง ๆ เรียกว่า sp_executesql และส่งคำสั่ง SQL และพารามิเตอร์ส่วนที่เหลือไปให้ดังนั้นมันจึงแสดงเป็น RPC

Pablo Castro
ผู้จัดการโปรแกรม - ทีม ADO.NET
Microsoft


ดังนั้นถ้าหนึ่งชุดคำสั่งในชุดล้มเหลวชุดทั้งหมดจะถูกย้อนกลับโดยอัตโนมัติ?
MonsterMMORPG

ไม่แต่ละคำสั่งในแบทช์จะถูกกำหนดโดยอัตโนมัติเว้นแต่ว่าแบทช์นั้นอยู่ในธุรกรรมที่ใช้งานอยู่หรือคุณตั้งค่า IMPLICIT_TRANSACTIONS ON แบทช์และธุรกรรมเป็นแนวคิดที่แตกต่างกันสองแบบ ฉันรู้ว่าคำถามนี้เก่ามากฉันแค่ทิ้งสิ่งนี้ไว้ที่ผู้อ่านในอนาคต
spaghettidba
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.