· 8 years ago · May 07, 2018, 05:36 AM
1SET NOCOUNT ON
2GO
3
4USE master
5GO
6if exists (select * from sysdatabases where name='koncertydb')
7 drop database koncertydb
8go
9
10DECLARE @device_directory NVARCHAR(520)
11SELECT @device_directory = SUBSTRING(filename, 1, CHARINDEX(N'master.mdf', LOWER(filename)) - 1)
12FROM master.dbo.sysaltfiles WHERE dbid = 1 AND fileid = 1
13
14EXECUTE (N'CREATE DATABASE koncertydb
15 ON PRIMARY (NAME = N''koncertydb'', FILENAME = N''' + @device_directory + N'koncertydb.mdf'')
16 LOG ON (NAME = N''koncertydb_log'', FILENAME = N''' + @device_directory + N'koncertydb.ldf'')')
17go
18
19exec sp_dboption 'koncertydb','trunc. log on chkpt.','true'
20exec sp_dboption 'koncertydb','select into/bulkcopy','true'
21GO
22
23set quoted_identifier on
24GO
25
26SET DATEFORMAT mdy
27GO
28use "koncertydb"
29go
30
31create table klub (
32 nazwa char(40) primary key,
33 adres char(40)
34)
35
36create table zespół (
37 nazwa char(40) primary key,
38 "ilość członków" int
39)
40
41create table koncert (
42 "nazwa klubu" char(40) references klub(nazwa),
43 "nazwa zespołu" char(40) references zespół(nazwa),
44 data date
45)
46go
47create view koncerty as
48 select [nazwa klubu],adres as [adres klubu],[nazwa zespołu],[ilość członków] as [ilość członków zespołu], data from klub kl, zespół z, koncert ko where
49 kl.nazwa = ko.[nazwa klubu] and z.nazwa = ko.[nazwa zespołu]
50go
51create trigger inkoncerty on koncerty
52 instead of insert
53 as
54 begin
55 declare @nazwaklubu char(40)
56 declare @adresklubu char(40)
57 declare @nazwazespołu char(40)
58 declare @ilośćczłonkówzespołu int
59 declare @data date
60 set @nazwaklubu=(select [nazwa klubu] from inserted)
61 set @adresklubu=(select [adres klubu] from inserted)
62 set @nazwazespołu =(select [nazwa zespołu] from inserted)
63 set @ilośćczłonkówzespołu=(select [ilość członków zespołu] from inserted)
64 set @data=(select data from inserted)
65 if exists(select [nazwa klubu],[adres klubu],[nazwa zespołu],[ilość członków zespołu],data from koncerty k
66 where k.[nazwa klubu]=@nazwaklubu
67 and k.[adres klubu]=@adresklubu
68 and k.[nazwa zespołu]=@nazwazespołu
69 and k.[ilość członków zespołu]=@ilośćczłonkówzespołu
70 and k.data=@data)
71 begin
72 print 'wstawiana krotka już istnieje'
73 return
74 end
75 else
76 begin
77 if exists(select nazwa from klub where nazwa=@nazwaklubu) and
78 not exists(select nazwa,adres from klub where nazwa=@nazwaklubu and adres=@adresklubu)
79 begin
80 print 'błędny adres klubu'
81 return
82 end
83 else
84 if not exists(select nazwa from klub where nazwa=@nazwaklubu)
85 insert into klub(nazwa,adres) values(@nazwaklubu,@adresklubu)
86
87 if exists(select nazwa from zespół where nazwa=@nazwazespołu) and
88 not exists(select nazwa,[ilość członków] from zespół where nazwa=@nazwazespołu and [ilość członków]=@ilośćczłonkówzespołu)
89 begin
90 print 'błędna ilość członków zespołu'
91 return
92 end
93 else
94 if not exists(select nazwa from zespół where nazwa=@nazwazespołu)
95 insert into zespół(nazwa,[ilość członków]) values(@nazwazespołu,@ilośćczłonkówzespołu)
96
97 insert into koncert([nazwa klubu],[nazwa zespołu],data) values(@nazwaklubu,@nazwazespołu,@data)
98 return
99 end
100 end
101go
102create trigger upkoncerty on koncerty
103 instead of update
104 as
105 begin
106 declare @nazwaklubu char(40)
107 declare @adresklubu char(40)
108 declare @nazwazespołu char(40)
109 declare @ilośćczłonkówzespołu int
110 declare @data date
111 set @nazwaklubu=(select [nazwa klubu] from deleted)
112 set @adresklubu=(select [adres klubu] from deleted)
113 set @nazwazespołu =(select [nazwa zespołu] from deleted)
114 set @ilośćczłonkówzespołu=(select [ilość członków zespołu] from deleted)
115 set @data=(select data from deleted)
116 delete from koncert where [nazwa klubu]=@nazwaklubu and [nazwa zespołu]=@nazwazespołu and data=@data
117 while exists(select [nazwa klubu],[nazwa zespołu],data from koncert where [nazwa klubu]=@nazwaklubu and [nazwa zespołu]=@nazwazespołu and data=@data)
118 delete from koncert where [nazwa klubu]=@nazwaklubu and [nazwa zespołu]=@nazwazespołu and data=@data
119 delete from klub where nazwa = @nazwaklubu and adres=@adresklubu
120 delete from zespół where nazwa = @nazwazespołu and [ilość członków]=@ilośćczłonkówzespołu
121 end
122go
123
124insert into koncerty([nazwa klubu],[adres klubu],[nazwa zespołu],[ilość członków zespołu],data) values('pod bębenkiem','wrocław','dziady',3,'2012-01-01')
125insert into koncerty([nazwa klubu],[adres klubu],[nazwa zespołu],[ilość członków zespołu],data) values('pod bębenkiem','wrocław','dziady',3,'2012-01-01')
126insert into koncerty([nazwa klubu],[adres klubu],[nazwa zespołu],[ilość członków zespołu],data) values('pod bębenkiem','wrocław','dziady',3,'2012-01-01')
127
128select * from koncerty
129
130delete from koncerty where [nazwa klubu]='pod bębenkiem' and [adres klubu]='wrocław' and [nazwa zespołu]='dziady' and [ilość członków zespołu]=3 and data='2012-01-01'
131
132select * from koncerty