Sự khác biệt giữa EXEC () và sp_executesql không có tham số?


8

Tôi vừa tìm hiểu về thủ tục lưu trữ sp_executesql mới. Tôi thích thực tế là có một cách để thực thi mã được tham số hóa từ bên trong SQL Server.

Nhưng, tôi tự hỏi sự khác biệt giữa việc sử dụng thủ tục được lưu trữ sp_executesql là gì khi bạn không có bất kỳ tham số nào so với việc chỉ gọi trực tiếp EXEC. Ngoài ra, có một hàm ý hiệu suất?

exec('select * from line_segment')
exec sp_executesql N'select * from line_segment'

Ngoài ra, có sự khác biệt giữa năm 2005 và 2008 hay họ xử lý những điều này giống nhau?

Câu trả lời:


11

sp_executesql hỗ trợ tham số hóa, trong khi EXEC chỉ chấp nhận một chuỗi.

Chỉ có sự khác biệt về hiệu năng có thể phát sinh là do tham số hóa, tức là một cuộc gọi sp_executesql được tham số hóa có nhiều khả năng có một kế hoạch lưu trữ có thể sử dụng lại. Một cuộc gọi EXEC có thể dẫn đến nhiều lãng phí không gian sử dụng một lần trong bộ đệm của kế hoạch.


Vì vậy, khi sp_executesql được gọi mà không có tham số, nó có hiệu quả như EXEC không?
Richard

Nếu cả hai tạo ra cùng một kế hoạch thực hiện thì có, hiệu suất phải giống nhau. Bạn có thể lập luận rằng việc đánh hơi tham số có thể gây ra vấn đề với sp_executesql nhưng nguyên nhân và giải pháp sẽ giống như đối với các procs được lưu trữ.
Mark Storey-Smith

2

Điều này giúp tôi phá vỡ cuộc phỏng vấn đó là lý do tại sao tôi đăng bài để giúp ai đó tương tự.

nhập mô tả hình ảnh ở đây

Chúc may mắn!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.