Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Procedura składowana EXEC vs różnica sp_executesql?

Twój sp_executesql SQL prawdopodobnie powinien być;

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

Umożliwi to wywołanie sp_executesql z @eStatus jako parametrem zamiast osadzania go w SQL. Da to tę przewagę, że @eStatus może zawierać dowolne znaki i będzie prawidłowo automatycznie eskortowany przez bazę danych, jeśli będzie to wymagane do zapewnienia bezpieczeństwa.

Porównaj to z SQL wymaganym dla EXEC;

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

...gdzie znak(39) osadzony w @Status spowoduje, że Twój SQL będzie nieważny i prawdopodobnie stworzy możliwość wstrzyknięcia SQL. Na przykład, jeśli @Status jest ustawiony na O'Reilly , wynikowy SQL byłby;

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przesyłanie strumieniowe obrazów z baz danych za pomocą HttpHandler

  2. Statystyki użycia indeksu SQL Server

  3. 2 sposoby na uzyskanie informacji o partycjach dla tabeli w SQL Server (T-SQL)

  4. Czy zła praktyka to NOLOCK (wskazówka dotycząca serwera SQL)?

  5. Dlaczego moje połączenie ODBC kończy się niepowodzeniem podczas uruchamiania ładowania SSIS w programie Visual Studio, ale nie podczas uruchamiania tego samego pakietu przy użyciu narzędzia Wykonaj pakiet