Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

SQL dinamis dan optimasi prosedur tersimpan

Jika Anda memiliki beberapa blok IF bersarang maka SQL Server akan dapat menyimpan rencana eksekusi. Saya berasumsi bahwa IF sangat mudah, mis. JIKA @Parameter1 BUKAN NULL

Jawaban SchmitzIT benar bahwa SQL Server juga dapat menyimpan jalur eksekusi untuk SQL Dinamis. Namun ini hanya benar jika sql dibangun dan dijalankan dengan benar.

Dengan dibangun dengan benar, maksud saya secara eksplisit mendeklarasikan parameter dan meneruskannya ke sp_executesql. Misalnya

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

Seperti yang Anda lihat, teks sqlcommand tidak membuat hardcode nilai paramer untuk digunakan. Mereka dilewatkan secara terpisah di exec sp_executesql

Jika Anda menulis sql dinamis lama yang buruk

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

exec sp_executesql @sqlcommand

maka SQL Server tidak akan dapat menyimpan rencana eksekusi



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tidak dapat terhubung ke database SQLServer di aplikasi Java

  2. INSERT INTO dengan exec dengan beberapa set hasil

  3. MASUKKAN MASSAL dengan kolom identitas (kenaikan otomatis)

  4. Entity Framework EF4.1 - prosedur tersimpan tidak dapat ditemukan di wadah

  5. EF Function Import tidak mengenali kolom yang dikembalikan oleh StoredProc