我已经写了两个存储过程,一个与sp_executesql
和其他没有sp_executesql的 都被正确地执行相同的结果,我没有得到的是有什么区别这里存储过程EXEC与sp_executesql的区别?
EXEC(@SQL)VS之间EXEC sp_executesql的@SQL,N '@ eStatus VARCHAR(12)', @eStatus = @Status
和EXEC(@SQL)如何容易产生SQL注入和sp_executesql的@SQL ...... ISN “T?
下面的存储过程,而不sp_executesql的
ALTER proc USP_GetEmpByStatus
(
@Status varchar(12)
)
AS
BEGIN
DECLARE @TableName AS sysname = 'Employee'
Declare @Columns as sysname = '*'
DECLARE @SQL as nvarchar(128) = 'select ' + @Columns + ' from ' + @TableName + ' where Status=' + char(39) + @Status + char(39)
print (@SQL)
EXEC (@SQL)
END
EXEC USP_GetEmpByStatus 'Active'
以下存储过程sp_executesql的
create proc USP_GetEmpByStatusWithSpExcute
(
@Status varchar(12)
)
AS
BEGIN
DECLARE @TableName AS sysname = 'JProCo.dbo.Employee'
Declare @Columns as sysname = '*'
DECLARE @SQL as nvarchar(128) = 'select ' + @Columns + ' from ' + @TableName + ' where Status=' + char(39) + @Status + char(39)
print @SQL
exec sp_executesql @SQL, N'@eStatus varchar(12)', @eStatus = @Status
END
EXEC USP_GetEmpByStatusWithSpExcute 'Active'
WHOA通过实际的价值!已经停止编码SQL注入!每次调用sp_executesql时,都可能让Internet上的每个joe黑客进入你的服务器。 – SecurityMatt