sql >> Database >  >> RDS >> Sqlserver

Opgeslagen procedure EXEC vs sp_executesql verschil?

Uw sp_executesql SQL zou waarschijnlijk moeten zijn;

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

Hierdoor kunt u sp_executesql aanroepen met @eStatus als parameter in plaats van deze in de SQL in te sluiten. Dat geeft het voordeel dat @eStatus elke tekens kan bevatten en het zal, indien nodig om veilig te zijn, automatisch correct worden ontsnapt door de database.

Vergelijk dat met de SQL die vereist is voor EXEC;

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

...waarbij een char(39) ingebed in @Status uw SQL ongeldig maakt en mogelijk een SQL-injectiemogelijkheid creëert. Als @Status bijvoorbeeld is ingesteld op O'Reilly , uw resulterende SQL zou zijn;

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


  1. Levensverzekeringsgegevensmodel

  2. Hoe verwijder je een bepaalde rij uit de mysql-tabel met dezelfde kolomwaarden?

  3. MySQL Select:WHERE (time now) =TUSSEN tabelwaarde EN tabelwaarde

  4. Hoe rijen in een SQL Server-resultatenset te beperken