Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Unterschied zwischen Stored Procedure EXEC und sp_executesql?

Ihr sp_executesql SQL sollte wahrscheinlich;

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

Dadurch können Sie sp_executesql mit @eStatus als Parameter aufrufen, anstatt es in die SQL einzubetten. Das hat den Vorteil, dass @eStatus beliebige Zeichen enthalten kann und es wird von der Datenbank automatisch korrekt maskiert, wenn dies aus Sicherheitsgründen erforderlich ist.

Vergleichen Sie dies mit dem für EXEC erforderlichen SQL;

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

... wo ein in @Status eingebettetes Zeichen (39) Ihr SQL ungültig macht und möglicherweise eine SQL-Injection-Möglichkeit schafft. Zum Beispiel, wenn @Status auf O'Reilly gesetzt ist , wäre Ihr resultierendes SQL;

select acol,bcol,ccol FROM myTable WHERE Status='O'Reilly'