Code Library
Home Submit Free Hosting Link To Us Contacts

SQL Create view one two

SQL Create view one two SQL SQL Create view one two 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







Tatet