SQL Create view one two
SQL
Download (.zip)
use pubs go
if exists (SELECT * FROM sysobjects WHERE name='one' and type='U') DROP TABLE one go
if exists (SELECT * FROM sysobjects WHERE name='two' and type='U') DROP TABLE two go
if exists (SELECT * FROM sysobjects WHERE name='one_two' and type='V') DROP VIEW one_two go
if exists (SELECT * FROM sysobjects WHERE name='one_two_equijoin' and type='V') DROP VIEW one_two_equijoin go
CREATE TABLE one ( col11 int NOT NULL, col12 int NOT NULL )
CREATE TABLE two ( col21 int NOT NULL, col22 int NOT NULL, ) GO
CREATE VIEW one_two AS (SELECT col11, col12, col21, col22 FROM one LEFT JOIN two ON (col11=col21)) GO
-- This insert succeeds. INSERT one_two (col11, col12) VALUES (1, 2) GO
CREATE VIEW one_two_equijoin AS (SELECT col11, col12, col21, col22 FROM one JOIN two ON (col11=col21)) WITH CHECK OPTION GO
-- This insert fails because the CHECK OPTION is not satisfied. INSERT one_two_equijoin (col11, col12) VALUES (1, 2) GO
INSERT two VALUES (1, 2) GO
-- Now that matching rows are in TWO, the same insert now succeeds. INSERT one_two_equijoin (col11, col12) VALUES (1, 2) GO
SELECT * FROM one SELECT * FROM two SELECT * FROM one_two SELECT * FROM one_two_equijoin GO
-- But trying to insert all columns always fails with error 4405. INSERT one_two (col11,col12,col21,col22) VALUES (1,2,NULL,NULL) go
-- And trying to delete from a view that is a join always fails. DELETE one_two go
if exists (SELECT * FROM sysobjects WHERE name='AU_VIEW' and type='V') DROP VIEW AU_VIEW go
CREATE VIEW AU_VIEW as SELECT * FROM authors go
-- Temporarily suspend constraints ALTER TABLE titles NOCHECK CONSTRAINT ALL GO
ALTER TABLE titleauthor NOCHECK CONSTRAINT ALL GO
ALTER TABLE authors NOCHECK CONSTRAINT ALL GO
BEGIN TRAN DELETE AU_VIEW -- Deleting through view deletes rows in underlying table. SELECT * FROM authors ROLLBACK TRAN go
CREATE VIEW AU_VIEW2 (au_lname,au_fname,full_name) as SELECT au_lname, au_fname,au_lname+au_fname from authors go
-- This view is not updatable because the full_name column is derived. UPDATE AU_VIEW2 SET au_fname='John',au_lname='Smith',full_name='j' SELECT * FROM AU_VIEW2 go
-- Re-enable suspended constraints ALTER TABLE titles CHECK CONSTRAINT ALL GO
ALTER TABLE titleauthor CHECK CONSTRAINT ALL GO
ALTER TABLE authors CHECK CONSTRAINT ALL GO
|