Membuat dinamis query pada Store Procedure di SQL Server

Pada SQL Server terdapat sebuah prosedur untuk mengeksekusi query yang disimpan pada variable. Dengan ini kita dapat mengirimkan parameter query dari program sehingga query yang dihasilkan lebih dinamis.

Store procedure yang digunakan adalah “sp_executesql”. Untuk menjalakan sama seperti store procedure lainnya membutuhkan parameter dgn format sederhana:

exec sp_executesql [perintah sql]

Atau juga perintah sql tersebut bisa ditaruh di variable:

declare @ssql nvarchar(max)

set @ssql=N’select * from ttable’

exec sp_executesql @ssql

Masalah yang bisa muncul adalah ketika ingin menambahkan kriteria untuk filtering. Misalnya akan menambahkan filter berupa string, sedangkan query sendiri berupa string. Hal ini bisa diakali dengan 2 cara :

1. Dengan setting “quoted_identifier” OFF (untuk mengenalkan “double quote”) atau ON (tidak menggunakan “double quote”)

set quoted_identifier OFF

Declare @ssql nvarchar(max)

set @ssql=’select * from ttable where tcolumn=”filter”‘

exec sp_executesql @ssql

isi dari @ssql adalah

select * from ttable where tcolumn=”filter”

karena quote identifier disetting off, maka perintah diatas tidak akan error, tetapi jika diganti

set quoted_identifier OFF

maka perintah tersebut akan error.

2. Menambahkan “single quote” sebanyak 2x sebagai pengganti “double quote” (yang mengapit string value)

Declare @ssql nvarchar(max)

set @ssql=’select * from ttable where tcolumn=”filter”’

exec sp_executesql @ssql

String value “filter” diapit oleh “single quote” sebanyak 2x (bukan double quote), isi dari variable @ssql adalah

select * from ttable where tcolumn=’filter’

Leave a Reply

Your email address will not be published. Required fields are marked *