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

Deklarasikan Variabel untuk String Kueri

Itu mungkin, tetapi memerlukan penggunaan SQL dinamis.
Saya sarankan membaca Kutukan dan berkah dinamis SQL sebelum melanjutkan...

DECLARE @theDate varchar(60)
SET @theDate = '''2010-01-01'' AND ''2010-08-31 23:59:59'''

DECLARE @SQL VARCHAR(MAX)  
SET @SQL = 'SELECT AdministratorCode, 
                   SUM(Total) as theTotal, 
                   SUM(WOD.Quantity) as theQty, 
                   AVG(Total) as avgTotal, 
                  (SELECT SUM(tblWOD.Amount)
                     FROM tblWOD
                     JOIN tblWO on tblWOD.OrderID = tblWO.ID
                    WHERE tblWO.Approved = ''1''
                      AND tblWO.AdministratorCode = tblWO.AdministratorCode
                      AND tblWO.OrderDate BETWEEN '+ @theDate +')'

EXEC(@SQL)

SQL Dinamis hanyalah pernyataan SQL, disusun sebagai string sebelum dieksekusi. Jadi rangkaian string yang biasa terjadi. SQL dinamis diperlukan setiap kali Anda ingin melakukan sesuatu dalam sintaks SQL yang tidak diizinkan, seperti:

  • parameter tunggal untuk mewakili daftar nilai yang dipisahkan koma untuk klausa IN
  • variabel untuk mewakili nilai dan sintaks SQL (IE:contoh yang Anda berikan)

EXEC sp_executesql memungkinkan Anda untuk menggunakan parameter bind/preparedstatement sehingga Anda tidak perlu khawatir dengan keluarnya tanda kutip tunggal/dll untuk serangan injeksi SQL.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Memisahkan string yang sangat besar dengan pembatas khusus?

  2. Cara mendapatkan nilai baris sebelumnya

  3. Jika Kunci Asing Tidak Ada Kemudian Tambahkan Batasan Kunci Asing (Atau Jatuhkan Batasan Kunci Asing Jika Ada) tanpa menggunakan Nama?

  4. Cara menghasilkan semua skrip kendala

  5. Apa itu @@MAX_PRECISION di SQL Server?