Tautan yang disediakan Kangkan akan menunjukkan kepada Anda cara melakukannya seandainya Anda mengetahui nama kolom sebelumnya. Kami menggunakan logika yang sama, kecuali menggunakan SQL dinamis untuk membuat pernyataan. Ada 2 bagian untuk setiap bidang yang perlu Anda sertakan, bidang dalam pernyataan pilih dan gabungan yang sesuai untuk mendapatkan nilai...jadi kita perlu membuat pernyataan dalam dua bagian
Pertama deklarasikan 3 variabel untuk membangun ini...Saya akan menggunakan @select, @join, dan @sql untuk contoh ini. Berikan variabel nilai awal
set @select = 'select user_id,'
set @join = 'from table t'
sekarang mendeklarasikan dan memuat kursor dengan nilai yang berbeda di bidang table.key. Saya akan menggunakan @field karena variabel akan diisi dengan bidang table.key yang berbeda. Kemudian ulangi untuk membangun dua variabel:
set @select = @select + ', ' + @field + '.value as '[email protected]+'
set @join = @join + ' left join table ' + @field + 'on '[email protected]+'.key = t.key and and '[email protected]+'.user_id = t.user_id
(gabungan dirancang untuk menggunakan nilai di @field sebagai alias tabel)
loop melalui kursor Anda membangun @select dan @join. Di akhir perulangan:
set @sql = @select + @join + 'where clause if you want'
exec @sql
SQL dinamis yang dibangun seperti ini bisa sangat merepotkan untuk memecahkan masalah (dan mendapatkan yang benar) dan membuka masalah keamanan ... tapi ini satu-satunya cara saya bisa melihat ini selesai. Perhatikan batasan ukuran pada variabel Anda.... jika Anda memiliki terlalu banyak Kunci yang berbeda di sana, variabel akan tumbuh terlalu besar. Maaf saya tidak bisa lebih tepat dengan pseudo ini... Anda akan menemukan membangun sql dinamis di sql sangat melelahkan.