Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Sự khác biệt giữa quy trình EXEC và sp_executesql?

sp_executesql của bạn SQL có lẽ phải là;

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

Điều này sẽ cho phép bạn gọi sp_executesql với @eStatus làm tham số thay vì nhúng nó vào SQL. Điều đó sẽ mang lại lợi thế rằng @eStatus có thể chứa bất kỳ ký tự nào và nó sẽ được cơ sở dữ liệu tự động thoát đúng cách nếu được yêu cầu bảo mật.

Đối chiếu với SQL được yêu cầu cho EXEC ;

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

... trong đó một char (39) được nhúng trong @Status sẽ làm cho SQL của bạn không hợp lệ và có thể tạo ra khả năng chèn SQL. Ví dụ:nếu @Status được đặt thành O'Reilly , SQL kết quả của bạn sẽ là;

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. Ví dụ về ROUND () trong SQL Server

  2. Tìm tất cả các bảng chứa cột có tên được chỉ định - MS SQL Server

  3. Làm cách nào để thay đổi ràng buộc khóa chính bằng cú pháp SQL?

  4. Làm cách nào để tôi có được một Kế hoạch Thực thi Truy vấn trong SQL Server?

  5. Cách thực thi Thủ tục được lưu trữ từ Laravel