Ich habe zwei gespeicherte Prozedur einer mit sp_executesql
geschrieben und andere haben nicht Sp_executesql beide richtig gleiche Ergebnisse ausgeführt werden, habe ich nicht bekommen, was der Unterschied zwischenGespeicherte Prozedur EXEC vs sp_executesql Unterschied?
EXEC (@SQL) vs hier ist EXEC sp_executesql @SQL, N '@ estatus varchar (12)', @eStatus = @Status
und wie exec (@SQL) für SQL-Injection anfällig ist und sp_executesql @SQL ...... isn nicht?
Below Stored Procedure ohne 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'
Unten gespeicherte Prozedur mit 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 passieren !!! Hört auf, bereits SQL-Injektionen zu codieren Jedes Mal, wenn Sie sp_executesql aufrufen, lassen Sie möglicherweise jeden Joe Hacker im Internet in Ihren Server ein. – SecurityMatt