sql >> Databáze >  >> RDS >> Sqlserver

Dynamické SQL a optimalizace uložených procedur

Pokud máte více vnořených bloků IF, pak SQL Server bude schopen ukládat plány provádění. Předpokládám, že IF jsou jednoduché, např. POKUD @Parameter1 NENÍ NULL

Odpověď společnosti SchmitzIT je správná, že SQL Server může také ukládat cesty provádění pro dynamické SQL. To však platí pouze v případě, že je sql správně vytvořen a spuštěn.

Správně sestaveným mám na mysli explicitní deklaraci parametrů a jejich předání do sp_executesql. Například

declare @Param1 nvarchar(255) = 'foo'
        ,@Param2 nvarchar(255) = 'bar'
        ,@sqlcommand nvarchar(max)
        ,@paramList nvarchar(max)

set @paramList = '@Param1 nvarchar(255), @Param2 nvarchar(255)'
set @sqlcommand = N'Select Something from Table where Field1 = @Param1 AND Field2 = @Param2'

exec sp_executesql @statement = @sqlcommand
                  ,@params = @paramList
                  ,@Param1 = @Param1
                  ,@Param2 = @Param2

Jak můžete vidět, text příkazu sql nekóduje napevno hodnoty parametru, které se mají použít. Jsou předávány samostatně v exec sp_executesql

Pokud napíšete špatné staré dynamické sqL

set @sqlcommand = N'Select Something from Table where Field1 = ' + @Param1  + ' AND Field2 = ' + @Param2

exec sp_executesql @sqlcommand

pak SQL Server nebude moci ukládat plány provádění



  1. Co je datový typ SYSNAME v SQL Server?

  2. Nelze připojit kontejner MySQL ke kontejneru Tomcat v dockeru

  3. Výpočet prošlých provozních hodin pro otevřené vstupenky (Oracle SQL)

  4. Chyba neplatného názvu sloupce při volání insert po vytvoření tabulky