Подтвердить что ты не робот

В чем разница между хранимой процедурой и представлением?

Я смущен о нескольких моментах:

  • В чем разница между хранимой процедурой и представлением?

  • Когда следует использовать хранимые процедуры и когда я должен использовать представления в SQL Server?

  • Разрешения позволяют создавать динамические запросы, где мы можем передавать параметры?

  • Какая из них самая быстрая и на какой основе она быстрее, чем другая?

  • Просмотр или хранимые процедуры постоянно выделяют память?

  • Что означает, если кто-то скажет, что представления создают виртуальную таблицу, а процедуры создают таблицу материалов?

Пожалуйста, дайте мне знать о других точках, если они есть.

4b9b3361

Ответ 1

Вид представляет таблицу virtual. Вы можете присоединиться к нескольким таблицам в представлении и использовать представление для представления данных, как если бы данные поступали из одной таблицы.

Хранимая процедура использует параметры для выполнения функции... обновляет ли она и вставляет данные или возвращает одиночные значения или наборы данных.

Создание просмотров и хранимых процедур - содержит некоторую информацию от Microsoft о том, когда и почему использовать их.

Скажем, у меня две таблицы:

tbl_user  Колонки:  .Идентификатор пользователя,  .user_name,  .user_pw

tbl_profile  Колонки:  .profile_id,  .Идентификатор пользователя  .profile_description

Итак, если я нахожусь в запросе из этих таблиц ALOT... вместо того, чтобы делать объединение в КАЖДОЙ peice из sql, я бы определил вид вроде:

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

Итак, в будущем, если я хочу запросить profile_description по id пользователя... все, что мне нужно сделать, это

SELECT profile_description FROM vw_user_profile WHERE user_id = @ID

Этот код можно использовать в хранимой процедуре, например:

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

Поэтому позже я могу позвонить

dbo.getDesc 25

и я получу описание для идентификатора пользователя 25, где 25 - ваш параметр.

Существует, очевидно, более подробная информация, но это только основная идея.

Ответ 2

Много информации доступно в Интернете

http://bytes.com/topic/sql-server/answers/450173-views-vs-stored-procedures-whats-difference

Вот хорошее резюме:

Хранимая процедура:

  • принимает параметры
  • НЕ может использоваться как строительный блок в более крупном запросе
  • может содержать несколько операторов, циклов, IF ELSE и т.д.
  • может выполнять модификации одной или нескольких таблиц.
  • НЕ может использоваться как цель INSERT, UPDATE или DELETE выражение.

Вид:

  • НЕ принимает параметры
  • может использоваться как строительный блок в более крупном запросе
  • может содержать только один запрос SELECT
  • НЕ МОЖЕТ выполнять изменения в любой таблице
  • но может (иногда) использоваться как цель INSERT, UPDATE или DELETE.

Ответ 3

Сначала вам нужно понять, что оба - разные вещи. Хранимые процедуры лучше всего использовать для операторов INSERT-UPDATE-DELETE. и Представления используются для операторов SELECT. и вы должны использовать оба.

В представлениях вы не можете изменять данные.

Ответ 4

Просмотры: Это виртуальная таблица, состоящая из одной или нескольких строк и столбцов из разных реальных таблиц базы данных. Это шаблон строк и столбцов нескольких таблиц. Вы не можете передавать какие-либо параметры здесь.

Хранимые процедуры: они представляют собой набор предварительно выполненных SQL-заявлений, в которых вы можете отправлять параметры как входные данные и извлекать выходные данные.

Представления могут использоваться в Хранимой процедуре, но Хранимая процедура не может использоваться в Views...!

Ответ 5

Вид - это простой способ сохранить сложный SELECT в базе данных.

Процедура хранения используется, когда простого SQL просто недостаточно. Процедуры хранения содержат переменные, циклы и вызовы других хранимых процедур. Это язык программирования, а не язык запросов.

  • Представления являются статическими. Подумайте о них как о новых таблицах с определенным макетом, а данные в них создаются "на лету", используя запрос, с которым вы его создали. Как и в любой таблице SQL, вы можете сортировать и фильтровать ее с помощью WHERE, GROUP BY и ORDER BY.

  • В зависимости от того, что вы делаете.

  • В зависимости от базы данных. Простые представления просто запускают запрос и фильтруют результат. Но такие базы данных, как Oracle, позволяют создать "материализованное" представление, которое в основном представляет собой таблицу, которая автоматически обновляется при изменении базовых данных вида.

    Материализованное представление позволяет создавать индексы в столбцах представления (особенно на вычисленных столбцах, которые не существуют нигде в базе данных).

  • Я не понимаю, о чем вы говорите.

Ответ 6

SQL View - это виртуальная таблица, основанная на запросе SQL SELECT. Представление ссылается на одну или несколько существующих таблиц базы данных или другие представления. Это мгновенный снимок базы данных, тогда как хранимая процедура представляет собой группу операторов Transact-SQL, скомпилированных в один план выполнения.

View - это простая демонстрация данных, хранящихся в таблицах базы данных, тогда как хранимая процедура представляет собой группу операторов, которые могут быть выполнены.

Вид быстрее, поскольку он отображает данные из таблиц, на которые ссылается, тогда как процедура хранилища выполняет инструкции sql.

Проверьте эту статью: Просмотр против хранимых процедур. Именно то, что вы ищете

Ответ 7

  • VIEW - это динамический запрос, в котором вы можете использовать "WHERE" -Clause
  • Хранимая процедура - это фиксированный выбор данных, который возвращает предопределенный результат
  • Ни представление, ни хранимая процедура не выделяют память. Только материализованный вид
  • ТАБЛИЦА - это всего лишь один ENTITY, представление может собирать данные из разных ENTITIES или TABLES

Ответ 8

Основное различие заключается в том, что когда вы запрашиваете представление, это определение вставляется в ваш запрос. Процедура также может давать результаты запроса, но она скомпилирована и так быстро. Другим вариантом являются индексированные представления.

Ответ 9

@Patrick правильно с тем, что он сказал, но чтобы ответить на ваши другие вопросы, "Вид" будет создан в памяти, и в зависимости от типа "Соединения", "Данные" и если будет проведена какая-либо агрегация, это может быть довольно голодная головоломка Просмотр.

Хранимые процедуры выполняют всю свою обработку либо с использованием Temp Hash Table, например, # tmpTable1, либо в памяти с помощью @tmpTable1. В зависимости от того, что вы хотите сказать ему.

Сохраненная процедура похожа на функцию, но называется ее прямым именем. вместо функций, которые фактически используются внутри самого запроса.

Очевидно, что большую часть времени таблицы памяти быстрее, если вы не извлекаете много данных.

Ответ 10

Махеш не совсем корректен, когда он предполагает, что вы не можете изменять данные в представлении. Итак, с просмотром патрика

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

Я могу обновить данные... в качестве примера я могу сделать любой из этих...

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

или

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

Вы не можете Вставить в это представление, так как не все поля во всей таблице присутствуют, и я предполагаю, что PROFILE_ID является первичным ключом и не может быть NULL. Однако иногда вы можете вставить INSERT в представление...

Я создал представление для существующей таблицы, используя...

Create View Junk as SELECT * from [TableName]

ТОГДА

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

и

DELETE from Junk Where ID>4

Оба INSERT и DELETE работали в этом случае

Очевидно, вы не можете обновлять любые агрегированные или вычисленные поля, но любое представление, которое является просто прямым представлением, должно быть обновляемым.

Если представление содержит более одной таблицы, вы не можете вставлять или удалять, но если представление является подмножеством одной таблицы, тогда вы обычно можете.

Ответ 11

В дополнение к приведенным выше комментариям я хотел бы добавить несколько замечаний о представлениях.

  • Представления могут использоваться, чтобы скрыть сложность. Представьте себе сценарий, в котором 5 человек работают над проектом, но только один из них слишком хорош с базой данных, например сложными объединениями. В таком сценарии он может создавать представления, которые могут быть легко запрошены другими членами команды, поскольку они запрашивают любую отдельную таблицу.
  • Безопасность может быть легко реализована Views. Предположим, что мы столбец Сотрудник, который содержит чувствительные столбцы, такие как Зарплата, номер SSN. Эти столбцы не должны отображаться для пользователей, которым не разрешено их просматривать. В этом случае мы можем создать представление, которое будет выбирать столбцы в таблице, не требующие авторизации, такие как имя, возраст и т.д., Не подвергая уязвимые столбцы (например, о зарплате и т.д., О которых мы упоминали ранее). Теперь мы можем удалить разрешение для прямого запроса таблицы Сотрудник и просто сохранить разрешение на чтение в представлении. Таким образом, мы можем реализовать безопасность с помощью Views.