อะไรคือความแตกต่างระหว่างชุดคำสั่ง SQL, คำสั่ง T-SQL และการเรียกขั้นตอนระยะไกล?
ฉันจะรู้ได้อย่างไรว่าส่วนหนึ่งของรหัส T-SQL เป็นชุดหรือคำสั่ง?
อะไรคือความแตกต่างระหว่างชุดคำสั่ง SQL, คำสั่ง T-SQL และการเรียกขั้นตอนระยะไกล?
ฉันจะรู้ได้อย่างไรว่าส่วนหนึ่งของรหัส T-SQL เป็นชุดหรือคำสั่ง?
คำตอบ:
ฉันคิดว่าคุณกำลังพูดถึงคลาส 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 และเจาะลึกลงไป
ชุดคำชี้แจง 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
GOเป็นตัวยุติแบตช์ที่เป็นที่ยอมรับและเป็นค่าเริ่มต้นของไคลเอนต์ยอดนิยมที่เราใช้ (เช่น SSMS และ sqlcmd) แต่มันก็คุ้มค่าที่จะสังเกตว่าGOสตริงที่แท้จริงในฐานะที่เป็นเทอร์มินัลแบตช์นั้น