Jaka jest różnica między procedurą składowaną a widokiem?

Jestem zdezorientowany co do kilku punktów:

  1. Jaka jest różnica między procedurą składowaną a widokiem?

  2. Kiedy powinienem używać procedur składowanych, a kiedy widoki, w SQL Server?

  3. Czy widoki pozwalają na tworzenie dynamicznych zapytań, gdzie możemy przekazać parametry?

  4. Który z nich jest najszybszy, a na jakiej podstawie jest szybszy od drugiego?

  5. Czy widoki lub procedury przechowywane przydzielają pamięć na stałe?

  6. Co to znaczy, jeśli ktoś mówi, że widoki tworzą tabelę wirtualną, podczas gdy procedury tworzą tabelę materiałów?

Proszę dać mi znać o więcej punktów, jeśli są jakieś.

Author: Zero Piraeus, 2011-03-04

10 answers

Widok reprezentuje tabelę wirtualną. Możesz dołączyć wiele tabel w widoku i użyć widoku do prezentowania danych tak, jakby dane pochodziły z jednej tabeli.

Procedura składowana używa parametrów do wykonania funkcji... niezależnie od tego, czy jest to aktualizacja i wstawianie danych, czy zwracanie pojedynczych wartości lub zestawów danych.

Tworzenie widoków i procedur składowanych - zawiera informacje od Microsoftu, kiedy i dlaczego używać każdego z nich.

Powiedzmy, że mam dwa tabele:

Tbl_user Kolumny: .user_id, .user_name, .user_pw

Tbl_profile Kolumny: .profile_id, .user_id .profile_description

Więc jeśli znajdę się querying z tych tabel dużo... zamiast robić join w każdym peice sql chciałbym zdefiniować Widok jak:

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

Więc w przyszłości, jeśli chcę zapytać profile_description przez identyfikator użytkownika... all I have to do is

SELECT profile_description FROM vw_user_profile WHERE user_id = @ID

Ten kod może być użyty w procedurze składowanej like:

create procedure dbo.getDesc
 @ID int
AS
begin
SELECT profile_description FROM vw_user_profile WHERE user_id = @ID
END
GO

So later on I can call

dbo.getDesc 25

I dostanę opis dla id użytkownika 25. gdzie 25 to Twój parametr.

Jest oczywiście dużo więcej szczegółów, ale to tylko podstawowa idea.
 95
Author: Patrick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-08 13:26:20

Mnóstwo informacji dostępnych w sieci jak to

Oto dobre podsumowanie:

Procedura Składowana:

  • akceptuje parametry
  • Może nie być użyty jako budulec w większym zapytaniu
  • może zawierać kilka instrukcji, pętli, IF ELSE, itd.
  • może wykonywać modyfikacje jednej lub kilku tabel
  • nie może być używany jako cel INSERT, UPDATE lub DELETE oświadczenie.

A Widok:

  • nie akceptuje parametrów
  • może być użyty jako budulec w większym zapytaniu
  • może zawierać tylko jedno zapytanie SELECT
  • nie można wykonywać modyfikacji w żadnej tabeli
  • ale może (czasami) być używany jako cel INSERT, UPDATE lub Usuń oświadczenie.
 61
Author: cusimar9,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-21 15:10:42

Najpierw musisz zrozumieć, że obie rzeczy są różne. Procedury składowane są najlepiej używane dla poleceń INSERT-UPDATE-DELETE. i widoki są używane dla instrukcji SELECT. i powinieneś używać obu.

w widokach nie można zmieniać danych. niektóre bazy danych mają widoki, które można aktualizować, gdzie można użyć INSERT-UPDATE-DELETE na widokach.

 7
Author: Mahesh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-18 08:44:10

Widok jest prostym sposobem na zapisanie złożonego SELECT w bazie danych.

Procedura sklepu jest używana, gdy prosty SQL nie wystarczy. Procedury Store zawierają zmienne, pętle i wywołania innych procedur składowanych. To język programowania, a nie język zapytań.

  1. Widoki są statyczne. Pomyśl o nich jak o nowych tabelach z określonym układem, a dane w nich zawarte są tworzone w locie za pomocą zapytania, za pomocą którego je utworzyłeś. Podobnie jak w przypadku każdej tabeli SQL, można ją sortować i filtrować za pomocą WHERE, GROUP BY i ORDER BY.

  2. Zależy od tego, co robisz.

  3. Zależy od bazy danych. Proste widoki po prostu uruchom zapytanie i filtruj wynik. Ale bazy danych, takie jak Oracle, pozwalają stworzyć "zmaterializowany" widok, który jest w zasadzie tabelą, która jest aktualizowana automatycznie, gdy podstawowe dane widoku ulegną zmianie.

    Zmaterializowany widok pozwala na tworzenie indeksów na kolumnach widoku (szczególnie na kolumnach obliczonych, które nigdzie nie istnieją w bazie danych).

  4. Nie rozumiem, o czym mówisz.

 5
Author: Aaron Digulla,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-04 14:33:10

Widok SQL jest wirtualną tabelą, która jest oparta na zapytaniu SQL SELECT. Widok odwołuje się do jednej lub więcej istniejących tabel bazy danych lub innych widoków. Jest to snap shot bazy danych, podczas gdy procedura składowana jest grupą poleceń Transact-SQL skompilowanych w jeden plan wykonania.

Widok jest prostą prezentacją danych przechowywanych w tabelach bazy danych, podczas gdy procedura składowana jest grupą instrukcji, które można wykonać.

Widok jest szybszy, ponieważ wyświetla dane z tabel odwołuje się natomiast procedura sklepu wykonuje polecenia sql.

Sprawdź ten artykuł: widok vs procedury składowane . Dokładnie to, czego szukasz

 4
Author: reggie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-04 14:36:50
  1. widok jest dynamicznym zapytaniem, w którym można użyć klauzuli "WHERE"
  2. procedura składowana jest stałym wyborem danych, który zwraca predefiniowany wynik
  3. ani widok, ani procedura składowana nie przydzielają pamięci. Tylko zmaterializowany widok
  4. Tabela to tylko jedna jednostka, Widok może zbierać dane z różnych jednostek lub tabel
 3
Author: swissben,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-04 14:33:08

Główna różnica polega na tym, że gdy odpytywasz Widok, jego definicja jest wklejana do twojego zapytania. Procedura może również dać wyniki kwerendy, ale jest skompilowany i tak szybciej. Inną opcją są widoki indeksowane..

 3
Author: rsc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-04 14:35:42

@Patryk ma rację z tym co powiedział, ale odpowiadając na twoje inne pytania Widok utworzy się w pamięci, i w zależności od rodzaju łączników, danych i czy jest jakaś agregacja, może to być Widok dość głodny pamięci.

Procedury składowane wykonują całą swoją pracę przy użyciu tabeli skrótów Temp, np. #tmpTable1 lub w pamięci przy użyciu @tmptable1. Zależy, co chcesz mu powiedzieć.

Procedura składowana jest jak funkcja, ale jest wywoływana bezpośrednio po jej nazwie. zamiast funkcji, które są faktycznie używane wewnątrz samego zapytania.

Oczywiście większość tabel pamięci czasu jest szybsza, jeśli nie pobierasz dużo danych.

 1
Author: Robbie Tapping,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-04 14:32:17

Mahesh nie jest całkiem poprawny, kiedy sugeruje, że nie można zmienić danych w widoku. Więc z Patrykiem poglądem

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
Mogę zaktualizować dane ... jako przykład mogę zrobić jedno z nich ...
Update vw_user_profile Set profile_description='Manager' where user_id=4

Lub

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

Nie można wstawić do tego widoku, ponieważ nie wszystkie pola w całej tabeli są obecne i zakładam, że PROFILE_ID jest kluczem głównym i nie może być NULL. Jednak czasami można wstawić do widoku ...

Utworzyłem widok na istniejącą tabelę używam ...

Create View Junk as SELECT * from [TableName]

THEN

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

I

DELETE from Junk Where ID>4

Zarówno INSERT jak i DELETE działały w tym przypadku

Oczywiście nie można zaktualizować żadnych pól, które są agregowane lub obliczane, ale każdy widok, który jest tylko prostym widokiem, powinien być aktualizowany.

Jeśli Widok zawiera więcej niż jedną tabelę, to nie można wstawić ani usunąć, ale jeśli widok jest podzbiorem tylko jednej tabeli, to zwykle można.

 1
Author: Glyn Roberts,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-13 10:32:44

Oprócz powyższych uwag chciałbym dodać kilka punktów na temat poglądów.

  1. widoki mogą być używane do ukrywania złożoności. Wyobraź sobie scenariusz, w którym 5 osób pracuje nad projektem, ale tylko jedna z nich jest zbyt dobra z bazami danych, takimi jak złożone połączenia. W takim scenariuszu może on tworzyć widoki, które mogą być łatwo odpytywane przez innych członków zespołu podczas odpytywania dowolnej pojedynczej tabeli.
  2. zabezpieczenia mogą być łatwo zaimplementowane przez widoki. Załóżmy, że mamy tabelę , która zawiera czułe kolumny jak , numer SSN . Kolumny te nie powinny być widoczne dla użytkowników, którzy nie są upoważnieni do ich przeglądania. W takim przypadku możemy utworzyć widok wybierając kolumny w tabeli, która nie wymaga żadnej autoryzacji jak Name, Wiek } itp., bez eksponowania newralgicznych kolumn (np. pensja itp. wspominaliśmy wcześniej). Teraz możemy usunąć uprawnienia do bezpośredniego zapytania tabeli i po prostu zachować odczyt pozwolenie na widok. W ten sposób możemy zaimplementować zabezpieczenia za pomocą widoków.
 1
Author: Ajendra Prasad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-11 05:37:57