Хранимая процедура EXEC против sp_executesql разницы?

мы написали две хранимые процедуры один сsp_executesql а другие нету sp_executesql оба правильно выполняются, я нене понимаю, в чем разница между

EXEC (@SQL) против EXEC sp_executesql @SQL, N '@eStatus varchar (12) ', @eStatus = @Status

и как EXEC (@SQL) подвержен внедрению SQL и sp_executesql @SQL ...... isn 'т?

Ниже хранимая процедура без 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'

Ответы на вопрос(4)

Ваш ответ на вопрос