Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Perbedaan prosedur tersimpan EXEC vs sp_executesql?

sp_executesql Your Anda SQL mungkin seharusnya;

DECLARE @SQL as nvarchar(128) = 'select ' + @Columns + ' from ' + 
            @TableName + ' where [email protected]'

Ini akan memungkinkan Anda untuk memanggil sp_executesql dengan @eStatus sebagai parameter alih-alih menyematkannya ke dalam SQL. Itu akan memberikan keuntungan bahwa @eStatus dapat berisi karakter apa pun dan itu akan diloloskan dengan benar secara otomatis oleh database jika diperlukan agar aman.

Bandingkan dengan SQL yang diperlukan untuk EXEC;

DECLARE @SQL as nvarchar(128) = 'select ' + @Columns + ' from ' + 
            @TableName + ' where Status=' + char(39) + @Status + char(39)

...di mana char(39) yang disematkan di @Status akan membuat SQL Anda tidak valid dan mungkin membuat kemungkinan injeksi SQL. Misalnya, jika @Status diatur ke O'Reilly , SQL yang Anda hasilkan adalah;

select acol,bcol,ccol FROM myTable WHERE Status='O'Reilly'


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nilai pencocokan klausa SQL WHERE dengan spasi tambahan

  2. Cara Membuat Database Online Dari Restore Mode di SQL Server

  3. Mengenal Beban Kerja SQL Server Anda

  4. Mengapa menggunakan kunci utama bukan nol di TSQL?

  5. Kinerja SQL pada LEFT OUTER JOIN vs NOT EXISTS