Saklı yordam ile görünüm arasındaki fark nedir?


138

Birkaç noktadan kafam karıştı:

  1. Saklı yordam ile görünüm arasındaki fark nedir?

  2. SQL Server'da saklı yordamları ne zaman ve ne zaman görünümleri kullanmalıyım?

  3. Görünümler, parametreleri iletebileceğimiz dinamik sorgular oluşturulmasına izin veriyor mu?

  4. Hangisi en hızlı ve hangisi diğerinden daha hızlı?

  5. Görünümler veya saklı yordamlar belleği kalıcı olarak ayırıyor mu?

  6. Birisi görünümlerin sanal bir tablo oluşturduğunu söylerken prosedürler bir malzeme tablosu oluşturduğunda ne anlama gelir?

Varsa, lütfen bana daha fazla puan bildirin.

Yanıtlar:


144

Görünüm, sanal bir tabloyu temsil eder . Bir görünümde birden çok tabloyu birleştirebilir ve verileri tek bir tablodan geliyormuş gibi sunmak için görünümü kullanabilirsiniz.

Saklı yordam, verileri güncellemek ve eklemek ya da tek değerler ya da veri kümeleri döndürmek gibi bir işlevi yapmak için parametreleri kullanır.

Görünümler ve Saklı Yordamlar Oluşturma - Microsoft'un her birinin ne zaman ve neden kullanılacağı hakkında bazı bilgileri vardır.

Diyelim ki iki masam var:

  • tbl_user, Sütunlu: user_id, user_name,user_pw
  • tbl_profile, Sütunlu: profile_id, user_id,profile_description

Yani, kendimi bu tablolardan sorgulama bulursanız bir sürü ... yerine her SQL parçası katılmak yerine, şöyle bir görünüm tanımlamak:

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

Ben sorguya istiyorsanız Böylece profile_descriptiontarafından user_idileride, bütün I yapmak zorunda:

SELECT profile_description FROM vw_user_profile WHERE user_id = @ID

Bu kod, aşağıdakiler gibi bir saklı yordamda kullanılabilir:

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

Daha sonra arayabilirim:

dbo.getDesc 25

ve user_id25 için açıklamayı alacağım , burada 25parametreniz.

Açıkçası çok daha fazla ayrıntı var, bu sadece temel fikir.


1
Ama katılabilir i parametre vermek zorunda değil de saklı yordamda birden çok tablo birleştirebilirsiniz.
NoviceToDotNet

5
ama bunu neden yapasın? ne başarmaya çalışıyorsun? Bir görünümü tablo olarak kullanabilirsiniz ... saklı yordamlar bir şeyler yapmak içindir ... görünümler hayatınızı kolaylaştırmak içindir.
Patrick

1
Bir görünümü depolanmış bir sorgu olarak düşünün, böylece işinizi yapmak için çok fazla birleştirmeniz gerektiğini düşündüğünüz iki tablonuz varsa, her zaman katılmak zorunda kalmamak için çalışmak için bir görünüm oluşturabilirsiniz.
Patrick

2
Almıyorum, lütfen biraz daha açıklama yapın.
NoviceToDotNet

2
ancak görünümünüzü DEPOLANIR ... böylece tek bir tablo gibi arayabilirsiniz. bu şekilde birleştirme işleminizi bir kez oluşturursunuz ve gelecekteki herhangi bir kullanım, doğrudan tabloyu sanki temel sql'yi çağıran görünümü referans alır.
Patrick

107

Burada bol miktarda bilgi mevcut

İşte iyi bir özet:

Saklı Yordam:

  • Parametreleri kabul eder
  • Can DEĞİL daha büyük bir sorguda blok bina olarak kullanılacak
  • Birkaç ifade, döngü, IF ELSE, vb. İçerebilir.
  • Bir veya birkaç tablo üzerinde değişiklik yapabilir
  • INSERT, UPDATE veya DELETE deyiminin hedefi olarak KULLANILAMAZ.

Manzara:

  • Does DEĞİL parametrelerini kabul
  • Daha büyük bir sorguda yapı taşı olarak kullanılabilir
  • Yalnızca tek bir SELECT sorgusu içerebilir
  • Can DEĞİL herhangi tabloya değişiklikleri gerçekleştirmek
  • Ancak (bazen) bir INSERT, UPDATE veya DELETE deyiminin hedefi olarak kullanılabilir.

6
Ayrıca Views herhangi bir "sipariş" veya "üst" maddeleri
içermemelidir

2
"INSERT, UPDATE veya DELETE deyiminin hedefi olarak KULLANILAMAZ" ne anlama gelir? Saklı Yordamda INSERT, DELETE, UPDATE kullanamaz mıyız?
Arsman Ahmad

"Bir görünüm, parametreleri kabul ETMEZ", doğru değil mi? Örneğin video: youtube.com/watch?v=zK-mWjUxKpw
xayer

Görünümler temel tablo / tablolarda değişiklik yapabilir: csharp-video-tutorials.blogspot.com/2012/09/…
Khurram

8

İlk önce, her ikisinin de farklı şeyler olduğunu anlamalısınız. Stored Proceduresen iyi INSERT-UPDATE-DELETEifadeler için kullanılır . Oysa ifadeler Viewsiçin kullanılır SELECT. Her ikisini de kullanmalısınız.

Görünümlerde verileri değiştiremezsiniz. Bazı veritabanlarında, kullanabileceğiniz güncellenebilir Görünümler INSERT-UPDATE-DELETEbulunur Views.


2
Görünümler'i kullanarak temel tablodaki verileri değiştirebilirsiniz. Görünümler güncellenebilir.
Dot Net geliştirici

7

SQL Görünümü, SQL SELECT sorgusunu temel alan sanal bir tablodur. Bir görünüm, varolan bir veya daha fazla veritabanı tablosuna veya diğer görünümlere başvurur. Saklı bir yordam, tek bir yürütme planında derlenen bir grup Transact-SQL deyimleri grubunun anlık çekimdir.

Görünüm veritabanı tablolarında depolanan verileri sergilemek için basitken, saklı yordam yürütülebilecek bir ifade grubudur.

Bir görünüm, başvurulan tablolardaki verileri görüntülerken daha hızlı olurken, bir depolama yordamı sql deyimlerini yürütür.

Bu makaleyi gözden geçirin : Saklı Yordamlara Karşı Görünüm . Tam olarak ne arıyorsun


5

Görünüm, bir kompleksi SELECTveritabanına kaydetmenin basit bir yoludur .

Basit SQL yeterli olmadığında bir mağaza prosedürü kullanılır. Mağaza yordamları, değişkenler, döngüler ve diğer saklı yordamlara çağrılar içerir. Bu bir sorgulama dili değil, bir programlama dili.

  1. Görünümler statiktir. Bunları belirli bir düzene sahip yeni tablolar olarak düşünün ve içindeki veriler, oluşturduğunuz sorguyu kullanarak anında oluşturulur. Herhangi bir SQL tablosunda olduğu gibi WHERE, GROUP BYve ile sıralayabilir ve filtreleyebilirsiniz ORDER BY.

  2. Ne yaptığınıza bağlıdır.

  3. Veritabanına bağlıdır. Basit görünümler yalnızca sorguyu çalıştırır ve sonucu filtreler. Ancak Oracle gibi veritabanları, temelde görünümün temel verileri değiştiğinde otomatik olarak güncellenen bir tablo olan "materyalize" bir görünüm oluşturmaya izin verir.

    Malzeme görünümü, görünümün sütunlarında (özellikle veritabanında hiçbir yerde bulunmayan hesaplanan sütunlarda) dizinler oluşturmanıza olanak tanır.

  4. Ne hakkında konuştuğunu anlamıyorum.


5

Yukarıdaki yorumlara ek olarak, Views hakkında birkaç puan eklemek istiyorum.

  1. Görünümler karmaşıklığı gizlemek için kullanılabilir. 5 kişinin bir proje üzerinde çalıştığı bir senaryo düşünün, ancak bunlardan sadece biri karmaşık birleştirmeler gibi veritabanı işlerinde çok iyi. Böyle bir senaryoda, diğer takım üyeleri tarafından herhangi bir tabloyu sorguladıkları için kolayca sorgulanabilecek Görünümler oluşturabilir.
  2. Güvenlik Views tarafından kolayca uygulanabilir. Diyelim ki Maaş , SSN numarası gibi hassas sütunlar içeren bir Tablo Çalışanı . Bu sütunların, görüntüleme yetkisi olmayan kullanıcılar tarafından görülmesi beklenmez. Bu durumda, hassas sütunları (daha önce bahsettiğimiz Maaş vb.) Göstermeden Ad , Yaş vb. Yetkilendirme gerektirmeyen bir tablodaki sütunları seçerek bir Görünüm oluşturabiliriz . Şimdi doğrudan Tablo çalışanını sorgulama iznini kaldırabilir ve sadece Görünüm'de okuma iznini saklayabiliriz . Bu şekilde Views'ı kullanarak güvenliği uygulayabiliriz.

4
  1. GÖRÜNÜM, "NEREDE" kullanabileceğiniz dinamik bir sorgudur.
  2. Saklı yordam, önceden tanımlanmış bir sonuç döndüren sabit bir veri seçimidir
  3. Ne görünüm ne de saklı yordam bellek ayırmaz. Yalnızca somutlaştırılmış bir görünüm
  4. TABLO sadece bir ENTITY'dir, bir görünüm farklı ENTITIES veya TABLOlardan veri toplayabilir

4

Mahesh, bir görünümdeki verileri değiştiremeyeceğinizi önerdiğinde doğru değildir. Patrick'in görüşüyle

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

Verileri güncelleyebilirim ... örnek olarak bunlardan herhangi birini yapabilirim ...

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

veya

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

Tüm tablodaki alanların tümü mevcut olmadığından ve PROFILE_ID öğesinin birincil anahtar olduğunu ve NULL olamayacağını varsayarak, bu görünüme INSERT edemezsiniz. Ancak bazen bir görünüm içine ekleyebilirsiniz ...

Mevcut bir tabloyu kullanarak bir görünüm oluşturdum ...

Create View Junk as SELECT * from [TableName]

SONRA

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

ve

DELETE from Junk Where ID>4

INSERT ve DELETE bu durumda çalıştı

Açıkçası, toplanan veya hesaplanan alanları güncelleyemezsiniz, ancak yalnızca düz bir görünüm olan herhangi bir görünüm güncellenebilir olmalıdır.

Görünüm birden fazla tablo içeriyorsa, ekleyemez veya silemezsiniz, ancak görünüm yalnızca bir tablonun alt kümesiyse, genellikle yapabilirsiniz.


3

Temel fark, bir görünümü sorgularken tanımının sorgunuza yapıştırılmasıdır. Yordam ayrıca sorgu sonuçlarını da verebilir, ancak derlenmiştir ve çok daha hızlıdır. Başka bir seçenek de dizinlenmiş görünümlerdir.


1

@Patrick söyledikleriyle doğrudur, ancak diğer sorularınızı cevaplamak için bir Görünüm kendini Hafızada oluşturacaktır ve Katılma, Veri türüne bağlı olarak yapılır ve herhangi bir toplama varsa, oldukça hafızaya aç bir Görünüm olabilir.

Saklı yordamlar işlemlerini Temp Hash Table gibi # tmpTable1 kullanarak veya @ tmpTable1 kullanarak bellekte yapar. Ne yapmak istediğine bağlı olarak.

Saklı Yordam bir İşlev gibidir, ancak doğrudan adıyla adlandırılır. aslında bir sorgu içinde kullanılan işlevler yerine.

Çok fazla veri almıyorsanız, çoğu zaman Bellek tabloları daha hızlıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.