Saturday, August 22, 2020

 

Can we update a view in SQL

   Part - 18

Click here for you tube video answer:




--*************************************
-- Q18 -- Can we update a view in SQL?
--*************************************

Scenario 1: A plain view built on single base table


Yes, we can update a plain view build on top of a single base table    


DROP TABLE IF EXISTS tblEmployee 
create table tblEmployee (Empid INT, EMpname varchar(20), Deptid INT)

INSERT tblEmployee Values (1,'emp1',1),(2,'emp2',2), (3,'emp3',3)

select * from tblEmployee


Create view Employee_View AS
SELECT Empid,EMpname,Deptid FROM  tblEmployee

select * from tblEmployee
select * from Employee_View

select * from tblEmployee
Update Employee_View SET Deptid = 11 WHERE Empid = 1
select * from tblEmployee

Scenario 2: A view built on top of multiple base tables


           Yes, we can update a view built on top of multiple base tables if the Updating column set belongs to a single table 

DROP TABLE IF EXISTS tblEmployee 
create table tblEmployee (Empid INT, EMpname varchar(20), Deptid INT)

DROP TABLE IF EXISTS Dept 
Create table Dept (Deptid INT, DeptName Varchar(20))

INSERT tblEmployee Values (1,'emp1',1),(2,'emp2',2), (3,'emp3',1)

INSERT Dept Values (1,'HR'), (2,'IT')
-- Drop table Dept

SELECT * FROM tblEmployee
SELECT * FROM Dept



DROP VIEW IF EXISTS Employee_Dept;

Create view Employee_Dept AS
SELECT Empid,EMpname,DeptName FROM  tblEmployee E
JOIN Dept D ON E.Deptid = D.Deptid;

SELECT * FROM tblEmployee
SELECT * FROM Dept

SELECT * FROM Employee_Dept

           No, we can not update a view built on top of multiple base tables if the Updating column set belongs to multiple base tables  

UPDATE Employee_Dept SET EMpname = 'Emp11', DeptName = 'Human Resource'
WHERE Empid = 1


The above statement will throw below error:

SELECT * FROM tblEmployee 
UPDATE Employee_Dept SET EMpname = 'Emp11' WHERE Empid = 1
SELECT * FROM tblEmployee 

SELECT * FROM Employee_Dept -- view
SELECT * FROM tblEmployee -- base table

SELECT * FROM Dept
UPDATE Employee_Dept SET DeptName = 'Human Resource' WHERE Empid = 1
SELECT * FROM Dept

The above update statements updates the base tables as the update column list belongs to single base table



No comments:

Post a Comment

  Printing Number Pattern using SQL Link for video answer: SQL: --********************* --PRINT Pattern --********************* -- 1 -- ...