Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Динамичен SQL и оптимизация на съхранена процедура

Ако имате множество вложени IF блокове, тогава SQL Server ще може да съхранява планове за изпълнение. Предполагам, че IF са ясни, напр. АКО @Parameter1 НЕ Е NULL

Отговорът на SchmitzIT е правилен, че SQL Server може също да съхранява пътеки за изпълнение за Dynamic SQL. Това обаче е вярно само ако sql е правилно изграден и изпълнен.

Под правилно изграден имам предвид изрично деклариране на параметрите и предаването им на sp_executesql. Например

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

Както можете да видите, текстът на sqlcommand не кодира твърдо стойностите на параметрите, които да се използват. Те се предават отделно в exec sp_executesql

Ако пишете лош стар динамичен sqL

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

exec sp_executesql @sqlcommand

тогава SQL Server няма да може да съхранява планове за изпълнение



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да преименувате база данни в SQL Server - SQL Server / TSQL урок, част 26

  2. База данни на SQL Server на UNC дял

  3. променете базата данни на „онлайн“ и задайте db на „мултипотребител“

  4. Как ISNUMERIC() работи в SQL Server

  5. SQL динамична опорна точка за цели