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'