Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Differenza tra la stored procedure EXEC e sp_executesql?

Il tuo sp_executesql Probabilmente dovrebbe esserlo SQL;

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

Ciò ti consentirà di chiamare sp_executesql con @eStatus come parametro invece di incorporarlo nell'SQL. Ciò darà il vantaggio che @eStatus può contenere qualsiasi carattere e verrà eseguito correttamente l'escape automaticamente dal database se necessario per essere sicuro.

Confrontalo con l'SQL richiesto per EXEC;

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

...dove un char(39) incorporato in @Status renderà il tuo SQL non valido e probabilmente creerà una possibilità di iniezione SQL. Ad esempio, se @Status è impostato su O'Reilly , il tuo SQL risultante sarebbe;

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