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

Forskellen mellem lagret procedure EXEC vs sp_executesql?

Din sp_executesql SQL burde nok være;

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

Dette vil tillade dig at kalde sp_executesql med @eStatus som en parameter i stedet for at indlejre det i SQL. Det vil give den fordel, at @eStatus kan indeholde alle tegn og den vil automatisk blive korrekt escaped af databasen, hvis det kræves for at være sikkert.

Sammenlign det med den SQL, der kræves til EXEC;

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

...hvor et char(39) indlejret i @Status vil gøre din SQL ugyldig og muligvis skabe en SQL-injektionsmulighed. For eksempel, hvis @Status er sat til O'Reilly , ville din resulterende SQL være;

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


  1. HVIS FINDER tilstand, der ikke fungerer med PLSQL

  2. Installation af postgresql med NSIS

  3. Formular i PDO for at opdatere data

  4. php - konvertering fra et json-format til et andet