Представления

Создание представлений (только для чтения):

CREATE VIEW V_Account AS

SELECT a.Full_Name, a.Id, a.Nick_Name FROM dbo.Account a;

CREATE VIEW V_Account_Type AS

SELECT a.Nick_Name, a.Full_Name, t.Name, t.[Description]

FROM dbo.Account a JOIN dbo.[Type] t ON a.Account_Type = t.Id;

CREATE VIEW V_Question_TestCase_Account AS

SELECT q.Id, q.Name as 'Question', q.Answers, q.Right_Answers, t.Name as 'Test_Name', a.Nick_Name as 'Creator_Nick', a.Full_Name as 'Creator_Name'

FROM dbo.Question q JOIN dbo.TestCase t ON q.Id_Test = t.Id JOIN dbo.Account a ON t.Id_Creator = a.Id;

CREATE VIEW V_Session_Account_TestCase AS

SELECT a.Full_Name, a.Nick_Name, s.Start_Time, s.Passed_Questions, t.Name

FROM dbo.[Session] s JOIN dbo.Account a ON s.Id_Account = a.Id JOIN dbo.TestCase t ON s.Id_Test = t.Id;

Изменение полей в представлениях:

-- RENAME A TEACHER INTO ENGLISH VERSION --

SELECT * FROM dbo.V_Account;

UPDATE dbo.V_Account SET Full_Name = 'Vasiliy Petrovich' WHERE Nick_Name LIKE 'p%';

SELECT * FROM dbo.V_Account;


-- RENAME TEACHER INTO COOL_GUY --

SELECT * FROM dbo.V_Account_Type;

UPDATE dbo.V_Account_Type SET Name = 'Cool_Guy' WHERE Name = 'Teacher';

SELECT * FROM dbo.V_Account_Type;

SELECT * FROM dbo.V_Question_TestCase_Account;

UPDATE dbo.V_Question_TestCase_Account SET Question = 'Виды баз данных:' WHERE Question = 'Виды БД:';

SELECT * FROM dbo.V_Question_TestCase_Account;


SELECT * FROM dbo.V_Session_Account_TestCase;

UPDATE dbo.V_Session_Account_TestCase SET Start_Time = DATEADD(MINUTE, 50, Start_Time) WHERE Start_Time = '2012-02-16 21:46:15.000';

SELECT * FROM dbo.V_Session_Account_TestCase;

Попытка выполнения операций вставки и удаления с представлениями "только для чтения":

CREATE VIEW V_Account_Type_Full AS

SELECT a.*, t.Id as 'type_id', t.Name, t.Rights, t.[Description] FROM dbo.Account a JOIN dbo.[Type] t ON a.Account_Type = t.Id;

-- TRY TO INSERT AND DELETE --

SELECT * FROM dbo.V_Account_Type_Full;

INSERT INTO dbo.V_Account_Type_Full VALUES ('looper', 'Jack Sparrow', 2, 'strange student', 2, 'Student', 1, 'Can only pass tests');

DELETE FROM dbo.V_Account_Type_Full WHERE Nick_Name = 'student';

SELECT * FROM dbo.V_Account_Type_Full;


Скрипты работы с модифицируемыми представлениями:

-- Modifiable VIEW --

CREATE VIEW V_Session_n_NULLS AS

SELECT s.Id, s.Id_Account, s.Id_Test, s.Start_Time FROM dbo.[Session] s;

SELECT * FROM dbo.V_Session_n_NULLS;

DELETE TOP(1) FROM dbo.V_Session_n_NULLS WHERE Id_Account = '5' AND Id_Test = '2';

SELECT * FROM dbo.V_Session_n_NULLS;

INSERT INTO dbo.V_Session_n_NULLS VALUES (5, 2, '2014-02-23 15:30');

SELECT * FROM dbo.V_Session_n_NULLS;


-- TRY TO INSERT VALUES INTO VIEW --

-- BUT ONE OF THEM WON'T BE SHOWN --

CREATE VIEW V_TestCase_Partial AS

SELECT t.* FROM dbo.TestCase t WHERE t.Questions_Amount > 1;

SELECT * FROM dbo.TestCase;

SELECT * FROM dbo.V_TestCase_Partial;

INSERT INTO dbo.V_TestCase_Partial VALUES ('ОБД-2', 'Вторая часть курса. ADO.NET', 4, '2015-12-30 00:00:000', '00:10:00', 5);

INSERT INTO dbo.V_TestCase_Partial VALUES ('ОБД-3', 'Третья часть курса', 4, '2020-12-30 00:00:000', '00:30:00', 1);

SELECT * FROM dbo.V_TestCase_Partial;

SELECT * FROM dbo.TestCase;


-- Modifiable!!! VIEWS!!! --

CREATE VIEW V_Session_Partial AS

SELECT s.Id, s.Id_Account, s.Id_Test, s.Start_Time, s.Passed_Questions FROM dbo.[Session] s;

CREATE VIEW V_Session_Partial2 AS

SELECT s.Id, s.Id_Account, s.Id_Test, s.Start_Time FROM dbo.V_Session_Partial s;

SELECT * FROM dbo.V_Session_Partial;

SELECT * FROM dbo.V_Session_Partial2;

DELETE TOP(1) FROM dbo.V_Session_n_NULLS WHERE Id_Account = '5' AND Id_Test = '2';

SELECT * FROM dbo.V_Session_Partial2;

INSERT INTO dbo.V_Session_Partial2 VALUES (5, 2, '2014-02-23 15:30');

SELECT * FROM dbo.V_Session_Partial2;


Выводы

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

Существует несколько серьезных нюансов при работе с представлениями. Самый главный из них - в сценарии создания должна присутствовать только одна команда CREATE VIEW и ничего более. Запрещается даже использовать команду USE.

Представления делятся на модифицируемые и "только для чтения". Проблема в том, что этот параметр задается неявно. Поэтому следует всегда проверять можно ли вставить в представление данные или нет. Также нужно понимать, что изменение значения можно производить и в таблице "только для чтения". Поэтому UPDATE работает для всех типов представлений.

Помимо этого в запрещены агрегатные функции и константы.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: