/*drop the tables */
use fall97_331
drop table PROJECTIONS
drop table P_Audit
go

/*create a PROJECTIONS table*/
use fall97_331
CREATE TABLE PROJECTIONS 
(    PROJECTION_ID   INT,
     PROJECTION_NAME INT,
     PROJECTION_TYPE INT,                                          
     SPHEROID_CODE   INT,
     PROJECTION_UOM  INT,
     ZONE_CODE       INT,
   )	
go

/*insert all the data into PROJECTIONS*/
INSERT INTO PROJECTIONS VALUES (1, 1, 12, 1, 1, 1)
INSERT INTO PROJECTIONS VALUES (2, 1, 10, 1, 1, 1)
INSERT INTO PROJECTIONS VALUES (3, 1, 15, 1, 1, 1)
INSERT INTO PROJECTIONS VALUES (4, 1, 17, 1, 1, 1)
INSERT INTO PROJECTIONS VALUES (5, 1, 18, 1, 1, 1)
go

/*create a  P_Audit table*/
use fall97_331
CREATE TABLE P_Audit (
	PROJECTION_ID   INT,
        PROJECTION_NAME INT,
        PROJECTION_TYPE INT,
        SPHEROID_CODE   INT,
        PROJECTION_UOM  INT,
        ZONE_CODE       INT,
        When_Changed    DATETIME, 
        PRIMARY KEY  (PROJECTION_ID, When_Changed)
)
go

/*create a DELETE trigger*/
CREATE TRIGGER Delete_PROJECTIONS
ON PROJECTIONS
FOR DELETE
AS
INSERT P_Audit
SELECT*,getdate()
FROM deleted
go

/*create a UPDATE trigger*/
CREATE TRIGGER Update_PROJECTIONS
ON PROJECTIONS
FOR UPDATE
AS
INSERT P_Audit
SELECT*,getdate()
FROM deleted
go

/*delete and update the data*/
DELETE FROM PROJECTIONS WHERE PROJECTION_ID=5 
UPDATE P_Audit SET When_Changed='02/3/1996' WHERE PROJECTION_ID=5 

UPDATE PROJECTIONS SET PROJECTION_TYPE=13 WHERE PROJECTION_ID=2
UPDATE P_Audit SET When_Changed='3/20/1996' WHERE PROJECTION_ID=2

UPDATE PROJECTIONS SET PROJECTION_TYPE=11 WHERE PROJECTION_ID=3
UPDATE P_Audit SET When_Changed='5/28/1996' WHERE PROJECTION_ID=3

UPDATE PROJECTIONS SET PROJECTION_TYPE=14 WHERE PROJECTION_ID=2
UPDATE P_Audit SET When_Changed='6/17/1996' 
WHERE PROJECTION_ID=2  AND
     (When_Changed=(SELECT MAX(When_Changed) FROM P_Audit WHERE PROJECTION_ID=2))

DELETE FROM PROJECTIONS WHERE PROJECTION_ID=4 
UPDATE P_Audit SET When_Changed='07/12/1996' WHERE PROJECTION_ID=4 

/*query PROJECTIONS table*/
print""
print"PROJECTIONS table"
SELECT PROJECTION_ID,PROJECTION_TYPE  
FROM PROJECTIONS

/*query P_Audit table*/
print""
print"P_Audit table"
SELECT PROJECTION_ID,PROJECTION_TYPE,When_Changed=convert(char,When_Changed,1)
FROM P_Audit
ORDER BY When_Changed
go

/*query recontructed table as of April 1,1996*/
print""
print"Reconstructed table as of April 1,1996"
SELECT PROJECTION_ID,PROJECTION_TYPE
FROM PROJECTIONS  P
WHERE NOT EXISTS(SELECT*
		FROM P_Audit  A
		WHERE P.PROJECTION_ID=A.PROJECTION_ID
		      AND A.When_Changed>'1996-04-01')
UNION
SELECT PROJECTION_ID,PROJECTION_TYPE
FROM P_Audit  A
WHERE When_Changed=(SELECT MIN(When_Changed)
	FROM P_Audit  A2
	WHERE A.PROJECTION_ID=A2.PROJECTION_ID
	AND A2.When_Changed>'1996-04-01')

/*query a transaction state table*/
print""
print"cf9.6 & cf9.7"
print "Convert PROJECTIONS to a transaction state table with projection type12"
SELECT SPHEROID_CODE,START_DATE='02/10/1992',STOP_DATE=CONVERT(CHAR,GETDATE(),101)
FROM P_Audit
WHERE PROJECTION_TYPE=12
UNION
SELECT SPHEROID_CODE,START_DATE='02/10/1992',STOP_DATE=convert(char,GETDATE(),101)
FROM PROJECTIONS
WHERE PROJECTION_TYPE=12

go

drop trigger Delete_PROJECTIONS
drop trigger Update_PROJECTIONS
go
