Apa perbedaan antara prosedur tersimpan dan tampilan?

143

Saya bingung tentang beberapa poin:

  1. Apa perbedaan antara prosedur tersimpan dan tampilan?

  2. Kapan saya harus menggunakan prosedur tersimpan, dan kapan saya harus menggunakan tampilan, di SQL Server?

  3. Apakah tampilan memungkinkan pembuatan kueri dinamis di mana kita dapat meneruskan parameter?

  4. Mana yang paling cepat, dan atas dasar apa yang satu lebih cepat dari yang lain?

  5. Apakah tampilan atau prosedur tersimpan mengalokasikan memori secara permanen?

  6. Apa artinya jika seseorang mengatakan bahwa views membuat tabel virtual, sedangkan prosedur membuat tabel material?

Tolong beri tahu saya tentang poin lainnya, jika ada.

NoviceToDotNet
sumber

Jawaban:

149

Tampilan mewakili tabel virtual . Anda dapat menggabungkan beberapa tabel dalam satu tampilan dan menggunakan tampilan untuk menyajikan data seolah-olah data tersebut berasal dari satu tabel.

Prosedur tersimpan menggunakan parameter untuk melakukan suatu fungsi ... apakah itu memperbarui dan menyisipkan data, atau mengembalikan nilai tunggal atau kumpulan data.

Membuat Tampilan dan Prosedur Tersimpan - memiliki beberapa informasi dari Microsoft tentang kapan dan mengapa menggunakannya.

Katakanlah saya memiliki dua tabel:

  • tbl_user, Dengan kolom: user_id, user_name,user_pw
  • tbl_profile, Dengan kolom: profile_id, user_id,profile_description

Jadi, jika saya menemukan diri saya banyak bertanya dari tabel-tabel itu ... daripada melakukan join di SETIAP bagian SQL, saya akan mendefinisikan tampilan seperti:

CREATE VIEW vw_user_profile
AS
  SELECT A.user_id, B.profile_description
  FROM tbl_user A LEFT JOIN tbl_profile B ON A.user_id = b.user_id
GO

Jadi, jika saya ingin permintaan profile_descriptionoleh user_iddi masa depan, semua harus saya lakukan adalah:

SELECT profile_description FROM vw_user_profile WHERE user_id = @ID

Kode itu dapat digunakan dalam prosedur tersimpan seperti:

CREATE PROCEDURE dbo.getDesc
    @ID int
AS
BEGIN
    SELECT profile_description FROM vw_user_profile WHERE user_id = @ID
END
GO

Jadi, nanti, saya bisa menelepon:

dbo.getDesc 25

dan saya akan mendapatkan deskripsi untuk user_id25, di mana 25adalah parameter Anda.

Jelas ada lebih banyak detail, ini hanya ide dasarnya.

Patrick
sumber
1
Tetapi saya dapat bergabung dapat menggabungkan beberapa tabel dalam prosedur tersimpan juga di mana saya tidak perlu memberikan parameter.
NoviceToDotNet
6
tapi KENAPA kamu melakukan itu? apa yang ingin kamu capai? Anda dapat menggunakan tampilan SEPERTI tabel ... prosedur tersimpan adalah untuk MELAKUKAN sesuatu ... tampilan untuk membuat hidup Anda lebih mudah.
Patrick
1
Pikirkan tampilan sebagai kueri tersimpan jadi jika Anda memiliki dua tabel yang menurut Anda harus banyak digabungkan untuk menyelesaikan pekerjaan, Anda dapat membuat tampilan untuk dikerjakan sehingga Anda tidak harus menggabungkannya sepanjang waktu.
Patrick
2
Saya tidak mengerti, tolong buat sedikit lebih banyak deskripsi.
NoviceToDotNet
2
benar tapi MENYIMPAN pandangan Anda kemudian ... sehingga Anda dapat menyebutnya seperti tabel tunggal. dengan cara itu Anda membuat gabungan Anda sekali, dan setiap masa depan menggunakan referensi tampilan secara langsung yang memanggil sql yang mendasari seolah-olah itu adalah tabel.
Patrick
111

Banyak info tersedia di sini

Ini ringkasan yang bagus:

Prosedur Tersimpan:

  • Menerima parameter
  • Dapat tidak digunakan sebagai blok bangunan dalam permintaan yang lebih besar
  • Dapat berisi beberapa pernyataan, loop, IF ELSE, dll.
  • Dapat melakukan modifikasi pada satu atau beberapa tabel
  • TIDAK dapat digunakan sebagai target dari pernyataan INSERT, UPDATE atau DELETE.

Pemandangan:

  • Apakah tidak menerima parameter
  • Dapat digunakan sebagai blok penyusun dalam kueri yang lebih besar
  • Hanya dapat berisi satu kueri SELECT
  • TIDAK dapat melakukan modifikasi pada tabel manapun
  • Tetapi dapat (terkadang) digunakan sebagai target dari pernyataan INSERT, UPDATE atau DELETE.
cusimar9
sumber
7
Juga Tampilan tidak boleh mengandung klausul "pesan berdasarkan" atau "atas"
sksallaj
2
Apa yang dimaksud dengan "TIDAK dapat digunakan sebagai target dari pernyataan INSERT, UPDATE atau DELETE"? Bisakah kita menggunakan INSERT, DELETE, UPDATE dalam Stored Procedure?
Arsman Ahmad
"Sebuah tampilan, TIDAK menerima parameter", itu tidak benar? Video tersebut misalnya: youtube.com/watch?v=zK-mWjUxKpw
xayer
Tampilan dapat melakukan modifikasi pada tabel / tabel dasar: csharp-video-tutorials.blogspot.com/2012/09/…
Khurram
8

Pertama, Anda perlu memahami, bahwa keduanya adalah hal yang berbeda. Stored Procedurespaling baik digunakan untuk INSERT-UPDATE-DELETEpernyataan. Sedangkan Viewsdigunakan untuk SELECTpernyataan. Anda harus menggunakan keduanya.

Dalam pandangan Anda tidak dapat mengubah data. Beberapa database memiliki Tampilan yang dapat diperbarui di mana Anda dapat menggunakannyaINSERT-UPDATE-DELETE di Views.

Mahesh
sumber
2
Anda dapat mengubah data dalam tabel yang mendasari menggunakan Views. Tampilan dapat diperbarui.
Pengembang Dot Net
7

Tampilan SQL adalah tabel virtual, yang didasarkan pada kueri SQL SELECT. Tampilan mereferensikan satu atau beberapa tabel database yang sudah ada atau tampilan lain. Ini adalah snap shot dari database sedangkan prosedur tersimpan adalah sekelompok pernyataan Transact-SQL yang dikompilasi menjadi satu rencana eksekusi.

View sederhana menampilkan data yang disimpan dalam tabel database sedangkan prosedur tersimpan adalah sekelompok pernyataan yang dapat dieksekusi.

Tampilan lebih cepat karena menampilkan data dari tabel yang direferensikan sedangkan prosedur penyimpanan mengeksekusi pernyataan sql.

Periksa artikel ini: Lihat vs Prosedur Tersimpan . Persis apa yang Anda cari

reggie
sumber
5
  1. A VIEW adalah query dinamis di mana Anda dapat menggunakan klausa "WHERE"
  2. Prosedur tersimpan adalah pemilihan data tetap, yang mengembalikan hasil yang telah ditentukan sebelumnya
  3. Baik tampilan, maupun prosedur tersimpan mengalokasikan memori. Hanya tampilan yang terwujud
  4. TABEL hanyalah satu ENTITY, tampilan dapat mengumpulkan data dari ENTITIES atau TABLES yang berbeda
swissben
sumber
5

Tampilan adalah cara sederhana untuk menyimpan kompleks SELECTdalam database.

Prosedur penyimpanan digunakan ketika SQL sederhana saja tidak cukup. Prosedur penyimpanan berisi variabel, loop, dan panggilan ke prosedur tersimpan lainnya. Ini adalah bahasa pemrograman, bukan bahasa kueri.

  1. Tampilan bersifat statis. Anggap saja sebagai tabel baru dengan tata letak tertentu dan data di dalamnya dibuat dengan cepat menggunakan kueri yang Anda buat dengannya. Seperti pada tabel SQL apa pun, Anda dapat mengurutkan dan memfilternya dengan WHERE, GROUP BYdan ORDER BY.

  2. Tergantung pada apa yang Anda lakukan.

  3. Tergantung pada database. Tampilan sederhana hanya menjalankan kueri dan memfilter hasilnya. Tapi database seperti Oracle memungkinkan untuk membuat tampilan "terwujud" yang pada dasarnya adalah tabel yang diperbarui secara otomatis ketika data yang mendasari tampilan berubah.

    Tampilan terwujud memungkinkan Anda membuat indeks pada kolom tampilan (terutama pada kolom yang dihitung yang tidak ada di mana pun dalam database).

  4. Saya tidak mengerti apa yang Anda bicarakan.

Aaron Digulla
sumber
5

Selain komentar di atas, saya ingin menambahkan beberapa poin tentang Views.

  1. Tampilan dapat digunakan untuk menyembunyikan kompleksitas. Bayangkan sebuah skenario di mana 5 orang sedang mengerjakan sebuah proyek tetapi hanya satu dari mereka yang terlalu baik dengan hal-hal database seperti gabungan yang rumit. Dalam skenario seperti itu, dia dapat membuat Tampilan yang dapat dengan mudah ditanyakan oleh anggota tim lain saat mereka menanyakan tabel tunggal mana pun.
  2. Keamanan dapat dengan mudah diimplementasikan oleh Views. Misalkan kita seorang Karyawan Meja yang berisi kolom sensitif seperti Gaji , Nomor SSN . Kolom ini seharusnya tidak terlihat oleh pengguna yang tidak berwenang untuk melihatnya. Dalam kasus seperti itu, kita dapat membuat Tampilan dengan memilih kolom dalam tabel yang tidak memerlukan otorisasi apa pun seperti Nama , Usia , dll., Tanpa memperlihatkan kolom sensitif (seperti Gaji dll. Yang kami sebutkan sebelumnya). Sekarang kita dapat menghapus izin untuk langsung melakukan kueri tabel Karyawan dan tetap mempertahankan izin baca di Tampilan. Dengan cara ini, kita dapat mengimplementasikan keamanan menggunakan Views.
Ajendra Prasad
sumber
4

Mahesh tidak sepenuhnya benar ketika dia menyarankan agar Anda tidak dapat mengubah data dalam satu tampilan. Begitu pula dengan pandangan patrick

CREATE View vw_user_profile AS 
Select A.user_id, B.profile_description
FROM tbl_user A left join tbl_profile B on A.user_id = b.user_id

SAYA BISA memperbarui data ... sebagai contoh, saya dapat melakukan salah satu dari ini ...

Update vw_user_profile Set profile_description='Manager' where user_id=4

atau

Update tbl_profile Set profile_description='Manager' where user_id=4

Anda tidak dapat MASUKKAN ke tampilan ini karena tidak semua bidang di semua tabel ada dan saya berasumsi bahwa PROFILE_ID adalah kunci utama dan tidak boleh NULL. Namun terkadang Anda dapat MENYISIPKAN ke tampilan ...

Saya membuat tampilan pada tabel yang ada menggunakan ...

Create View Junk as SELECT * from [TableName]

KEMUDIAN

Insert into junk (Code,name) values 
('glyn','Glyn Roberts'),
('Mary','Maryann Roberts')

dan

DELETE from Junk Where ID>4

Baik INSERT dan DELETE bekerja dalam kasus ini

Jelas Anda tidak dapat memperbarui bidang apa pun yang digabungkan atau dihitung tetapi tampilan apa pun yang hanya tampilan lurus harus dapat diperbarui.

Jika tampilan berisi lebih dari satu tabel maka Anda tidak bisa menyisipkan atau menghapus tetapi jika tampilan adalah subset dari satu tabel saja maka Anda biasanya bisa.

Glyn Roberts
sumber
3

Perbedaan utamanya adalah ketika Anda membuat kueri tampilan, maka definisinya ditempelkan ke dalam kueri Anda. Prosedur juga dapat memberikan hasil kueri, tetapi dikompilasi dan untuk lebih cepat. Opsi lainnya adalah tampilan yang diindeks ..

rsc
sumber
1

@Patrick benar dengan apa yang dia katakan, tetapi untuk menjawab pertanyaan Anda yang lain, Tampilan akan dibuat sendiri di Memori, dan tergantung pada jenis Gabungan, Data dan jika ada agregasi yang dilakukan, itu bisa menjadi View yang haus memori.

Prosedur yang disimpan melakukan semua pemrosesannya baik menggunakan Tabel Hash Temp misalnya # tmpTable1 atau dalam memori menggunakan @ tmpTable1. Bergantung pada apa yang ingin Anda perintahkan.

Prosedur Tersimpan seperti Fungsi, tetapi disebut Langsung dengan namanya. alih-alih Fungsi yang sebenarnya digunakan di dalam kueri itu sendiri.

Jelas sebagian besar tabel memori waktu lebih cepat, jika Anda tidak mengambil banyak data.

Robbie Tapping
sumber