Bisakah kita meneruskan parameter ke tampilan di Microsoft SQL Server?
Saya mencoba dengan create view
cara berikut, tetapi tidak berhasil:
create or replace view v_emp(eno number) as select * from emp where emp_id=&eno;
sql
sql-server
parameters
parameter-passing
views
arunachalam
sumber
sumber
Parameters are out of the discussion
terlalu berani. CounterexampleJawaban:
Seperti yang sudah dinyatakan Anda tidak bisa.
Solusi yang mungkin adalah dengan mengimplementasikan fungsi yang tersimpan, seperti:
Ini memungkinkan Anda untuk menggunakannya sebagai tampilan normal, dengan:
sumber
Ada 2 cara untuk mencapai apa yang Anda inginkan sayangnya tidak dapat dilakukan menggunakan tampilan.
Anda bisa membuat tabel dengan nilai fungsi yang ditentukan pengguna yang mengambil parameter yang Anda inginkan dan mengembalikan hasil kueri
Atau Anda dapat melakukan hal yang hampir sama tetapi membuat prosedur tersimpan bukan fungsi yang ditentukan pengguna.
Sebagai contoh
prosedur yang tersimpan akan terlihat seperti
Atau fungsi yang ditentukan pengguna akan terlihat seperti
sumber
SELECT
mudah: baca lebih lanjut .Tidak, Anda tidak bisa, seperti kata Mladen Prajdic. Anggaplah view sebagai "filter statis" pada sebuah tabel atau kombinasi tabel. Misalnya: tampilan dapat menggabungkan tabel
Order
danCustomer
jadi Anda mendapatkan "tabel" barisOrder
baru bersama dengan kolom baru yang berisi nama pelanggan dan nomor pelanggan (kombinasi tabel). Atau Anda dapat membuat tampilan yang hanya memilih pesanan yang tidak diproses dariOrder
tabel (filter statis).Anda kemudian akan memilih dari tampilan seperti Anda akan memilih dari tabel "normal" lainnya - semua penyaringan "non-statis" harus dilakukan di luar tampilan (seperti "Dapatkan semua pesanan untuk pelanggan yang disebut Miller" atau "Dapatkan pesanan yang tidak diproses" yang datang pada 24 Desember ").
sumber
Biasanya tampilan tidak parameter. Tetapi Anda selalu bisa menyuntikkan beberapa parameter. Misalnya menggunakan konteks sesi :
Doa:
Dan satu lagi:
Demo DBFiddle
Hal yang sama berlaku untuk Oracle (tentu saja sintaks untuk fungsi konteks berbeda).
sumber
Mengapa Anda memerlukan parameter dalam tampilan? Anda mungkin hanya menggunakan
WHERE
klausa.dan permintaan Anda harus melakukan pekerjaan:
sumber
WHERE
untuk tabel, bukanWHERE
untuk tampilan.Cara hacky untuk melakukannya tanpa prosedur atau fungsi tersimpan adalah dengan membuat tabel pengaturan di database Anda, dengan kolom Id, Param1, Param2, dll. Masukkan baris ke dalam tabel yang berisi nilai Id = 1, Param1 = 0, Param2 = 0, dll. Kemudian Anda dapat menambahkan gabungan ke tabel itu dalam tampilan Anda untuk membuat efek yang diinginkan, dan memperbarui tabel pengaturan sebelum menjalankan tampilan. Jika Anda memiliki beberapa pengguna yang memperbarui tabel pengaturan dan menjalankan tampilan secara bersamaan hal-hal bisa salah, tetapi sebaliknya itu akan berfungsi dengan baik. Sesuatu seperti:
sumber
tidak. jika Anda kemudian harus menggunakan fungsi yang ditentukan pengguna yang Anda dapat melewati parameter.
sumber
Tidak, tampilan tidak berbeda dengan SELECTing dari tabel.
Untuk melakukan apa yang Anda inginkan, gunakan fungsi yang ditentukan pengguna dengan nilai tabel dengan satu atau lebih parameter
sumber
Tampilan tidak lebih dari pernyataan 'SELECT' yang telah ditentukan sebelumnya. Jadi satu-satunya jawaban nyata adalah: Tidak, Anda tidak bisa.
Saya pikir apa yang benar-benar ingin Anda lakukan adalah membuat prosedur tersimpan, di mana pada prinsipnya Anda dapat menggunakan SQL yang valid untuk melakukan apa pun yang Anda inginkan, termasuk menerima parameter dan memilih data.
Sepertinya Anda benar-benar hanya perlu menambahkan klausa tempat ketika Anda memilih dari tampilan Anda, tetapi Anda tidak benar-benar memberikan detail yang cukup untuk memastikan.
sumber
kita bisa menulis prosedur tersimpan dengan parameter input dan kemudian menggunakan prosedur tersimpan itu untuk mendapatkan hasil yang ditetapkan dari tampilan. lihat contoh di bawah ini.
prosedur tersimpan adalah
dan tampilan dari mana kita bisa mendapatkan hasil adalah
sumber
Seperti yang saya tahu view bisa menjadi sesuatu seperti perintah pilih. Anda juga dapat menambahkan parameter ke pilih ini misalnya di mana pernyataan seperti ini:
sumber
Tidak, tampilan statis. Satu hal yang dapat Anda lakukan (tergantung pada versi server SQl) adalah mengindeks tampilan.
Dalam contoh Anda (hanya meminta satu tabel), tampilan yang diindeks tidak memiliki manfaat untuk hanya meminta tabel dengan indeks di atasnya, tetapi jika Anda melakukan banyak gabungan pada tabel dengan kondisi gabungan, tampilan yang diindeks dapat sangat meningkatkan kinerja.
sumber
Jika Anda tidak ingin menggunakan fungsi, Anda dapat menggunakan sesuatu seperti ini
Semoga ini bisa membantu
sumber
tidak, Anda dapat meneruskan parameter ke prosedur yang sedang dilihat
sumber
Berikut adalah opsi yang belum saya lihat:
Cukup tambahkan kolom yang ingin Anda batasi pada tampilan:
sumber
Anda dapat memotong hanya untuk menjalankan tampilan, SQL akan anggur dan menangis tetapi lakukan ini dan jalankan! Anda tidak bisa menabung.
sumber
Tampilan Anda dapat merujuk beberapa tabel eksternal yang berisi parameter Anda.
Seperti yang disebutkan lainnya, tampilan dalam SQL Server tidak dapat memiliki parameter input eksternal. Namun, Anda dapat dengan mudah memalsukan variabel dalam tampilan menggunakan CTE. Anda dapat menguji-menjalankannya di versi SQL Server Anda.
menghasilkan output:
juga via
JOIN
juga via
CROSS APPLY
sumber
Saya punya ide yang belum saya coba. Anda dapat melakukan:
Parameter Anda akan disimpan dan diubah di tabel Config.
sumber
Saya menyadari tugas ini untuk kebutuhan saya sebagai berikut
sumber