Perbedaan antara EXEC () dan sp_executesql tanpa parameter?

8

Saya baru saja belajar tentang prosedur tersimpan sp_executesql baru. Saya suka fakta bahwa ada cara untuk mengeksekusi kode parameter dari dalam SQL Server.

Tapi, saya bertanya-tanya apa bedanya antara menggunakan prosedur tersimpan sp_executesql ketika Anda tidak memiliki parameter dibandingkan hanya memanggil EXEC secara langsung. Juga, apakah ada implikasi kinerja?

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

Juga, apakah ada perbedaan antara 2005 dan 2008 atau apakah mereka menangani hal yang sama?

Richard
sumber

Jawaban:

11

sp_executesql mendukung parameterisasi, sedangkan EXEC hanya menerima string.

Hanya perbedaan kinerja yang mungkin timbul karena parameterisasi yaitu panggilan sp_executesql parameterised lebih mungkin untuk memiliki rencana cache yang dapat digunakan kembali. Panggilan EXEC cenderung menyebabkan banyak pemboros ruang sekali pakai dalam cache rencana.

Mark Storey-Smith
sumber
Jadi, ketika sp_executesql dipanggil tanpa parameter, sama efisiennya dengan EXEC?
Richard
Jika keduanya menghasilkan rencana eksekusi yang sama maka ya, kinerjanya harus sama. Anda bisa berpendapat bahwa mengendus parameter dapat menyebabkan masalah dengan sp_executesql tetapi penyebab dan solusi akan sama seperti untuk procs yang disimpan.
Mark Storey-Smith
2

Ini membantu saya untuk memecahkan wawancara itu sebabnya saya memposting untuk membantu seseorang untuk hal yang sama.

masukkan deskripsi gambar di sini

Semoga berhasil!

pedram
sumber