Guest User

Untitled

a guest
May 25th, 2018
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 5.55 KB | None | 0 0
  1. 1.)
  2. 1.1)
  3. CREATE DEFAULT wohndef AS "Dresden"
  4. sp_bindefault wohndef, "Mitarbeiter.Ort"
  5.  
  6. 1.2)
  7. CREATE DEFAULT berufdef AS "Dipl.-Ing."
  8. sp_bindefault berufdef, "Mitarbeiter.Beruf"
  9.  
  10. 2.)
  11. 2.1)
  12. CREATE RULE alterrule AS
  13.  
  14. DATEDIFF(YY,@age,GETDATE()) BETWEEN 18 AND 60
  15.  
  16. sp_bindrule alterrule, "Mitarbeiter.Gebdat"
  17.  
  18. 2.2)
  19. a.)
  20. CREATE RULE pronrrule AS CONVERT(INT,@pronr) BETWEEN 30 AND 50
  21. sp_bindrule pronrrule, "MiPro.Pronr"
  22.  
  23. b.)
  24. CREATE RULE istvzaerule AS @istvzae <=1.0
  25. sp_bindrule istvzrule, "MiPro.Istvzae"
  26.  
  27. 3.)
  28. ALTER TABLE Mitarbeiter  ADD CONSTRAINT mitconstr
  29. CHECK (Mitarbeiter.Mitnr
  30. LIKE '[0-9][0-9] [0-9] [0-9] [0-9]')
  31.  
  32.  
  33.  
  34. 4.)
  35. 4.1)
  36. ALTER TABLE MiPro ADD CONSTRAINT foreign_key
  37. FOREIGN KEY(Mitnr) REFERENCES Mitarbeiter(Mitnr)
  38.  
  39. Test:
  40. a.)
  41. INSERT INTO Mitarbeiter VALUES('200','Fate','Twisted','Dresden','11.11.1964',DEFAULT,'7777',NULL)
  42. INSERT INTO MiPro VALUES('200','32',0.7,0.7)
  43.  
  44.  
  45. UPDATE Mitarbeiter SET Mitnr='201' WHERE Mitnr='200'
  46. DELETE FROM Mitarbeiter WHERE Mitnr='200'
  47. Selects und UPDATE geht nicht: dependend KEY constriant violation…
  48. b.)
  49. UPDATE MiPro SET Mitnr='202' WHERE Mitnr='200'
  50. UPDATE:  FOREIGN KEY CONSTRAINT violation…
  51.  
  52. UPDATE Mitarbeiter SET Mitnr='201' WHERE Mitnr='200'
  53. DELETE FROM Mitarbeiter WHERE Mitnr='200'
  54. c.)
  55. INSERT INTO MiPro VALUES('300','31',0.4,0.5)
  56. UPDATE:  FOREIGN KEY CONSTRAINT violation…
  57.  
  58.  
  59. 4.2)
  60. ALTER TABLE Projekt ADD CONSTRAINT co_Leiter
  61. FOREIGN KEY(Projleiternr) REFERENCES Mitarbeiter(Mitnr)
  62.  
  63. gleiches verhalten wie oben
  64.  
  65.  
  66.  
  67.  
  68. TRIGGER
  69.  
  70. 5.)
  71. 5.1)
  72. CREATE TRIGGER refint_mipro
  73. ON MiPro FOR INSERT,UPDATE
  74. AS
  75. DECLARE @anz INT
  76. SELECT @anz=@@rowcount
  77.  
  78. IF(SELECT COUNT(*) FROM Projekt P,inserted
  79. WHERE P.Pronr=inserted.Pronr)!=@anz
  80. BEGIN
  81. PRINT 'Pronr nicht in Projekt vorhanden'
  82. PRINT 'Anzahl Datensätze:%1!',@anz
  83. ROLLBACK TRANSACTION
  84. END
  85. ELSE
  86. BEGIN
  87. PRINT 'Einfügen war erfolgreich'
  88. PRINT 'Anzahl Datensätze:%1!',@anz
  89. END
  90. --test— insert into MiPro values('200','40',0.4,0.5)
  91. 5.2)
  92. INSERT INTO MiPro VALUES('103','37',0.1,0.1)
  93. INSERT INTO MiPro VALUES('104','49',0.2,0.4)—nicht einfügbar weil Projekt 49 nicht vorhanden
  94. INSERT INTO MiPro VALUES('112','38',0.3,0.4)
  95.  
  96.  
  97. 5.3)
  98. INSERT INTO MiPro VALUES('99999','38',0.3,0.4)
  99. FOREIGN KEY CONSTRAINT violation occurred
  100.  
  101. 5.4)
  102. INSERT INTO MiPro SELECT * FROM depotN..quelleaumi2 WHERE Mitnr='188'
  103. Mitnr nicht IN Mitarbeiter vorhanden
  104.  
  105. --select M.Mitnr from Mitarbeiter M,depotN..quelleaumi2 D where M.Mitnr=D.Mitnr
  106.  
  107. INSERT INTO MiPro SELECT * FROM depotN..quelleaumi2 WHERE Mitnr='145'
  108. konflikt mit pronrrule: Pronr muss zwischen 30 und 50 sein
  109. INSERT INTO MiPro SELECT * FROM depotN..quelleaumi2 WHERE Mitnr='103'
  110. Primärschlüsselverletzung-> abbruch
  111. INSERT INTO MiPro SELECT * FROM depotN..quelleaumi2 WHERE Mitnr='113'
  112. INSERT INTO MiPro SELECT * FROM depotN..quelleaumi2 WHERE Mitnr='108'
  113. erfolgreich
  114. INSERT INTO MiPro SELECT * FROM depotN..quelleaumi2 WHERE Mitnr='104'
  115. Pronr nicht IN Projekt vorhanden
  116.  
  117. 6.)
  118. CREATE TRIGGER pro_del
  119. ON Projekt FOR DELETE
  120. AS
  121. DECLARE @anz INT
  122. SELECT @anz=@@rowcount
  123.  
  124. IF(SELECT COUNT(*) FROM MiPro MP,deleted
  125. WHERE MP.Pronr=deleted.Pronr)>0
  126. BEGIN
  127. PRINT 'Dem Projekt sind in MiPro noch Mitarbeiter zugewiesen'
  128. PRINT 'Anzahl Datensätze:%1!',@anz
  129. ROLLBACK TRANSACTION
  130. END
  131. ELSE
  132. BEGIN
  133. PRINT 'Löschen war erfolgreich'
  134. PRINT 'Anzahl Datensätze:%1!',@anz
  135. END
  136.  
  137. DELETE FROM Projekt  WHERE Pronr='35' OR Pronr='37' OR Pronr='38' OR Pronr='39'
  138. DELETE FROM Projekt  WHERE Pronr='31' OR Pronr='33' OR Pronr='43'
  139.  
  140. bei beiden noch Einträge IN MiPro
  141. 7.)
  142. 7.1)
  143. CREATE TRIGGER planmax
  144. ON MiPro
  145. FOR INSERT,UPDATE
  146. AS
  147. DECLARE @anz INT
  148. SELECT @anz=@@rowcount
  149.  
  150. IF(EXISTS(SELECT SUM(Planvzae) FROM MiPro GROUP BY Mitnr HAVING SUM(Planvzae)>1))
  151. BEGIN
  152. PRINT 'Der/Die Mitarbeiter  darf/dürfen nicht überlastet werden(Summe Planvzae pro Mitarbieter darf 1,0 nicht übersteigen)'
  153. SELECT M.* FROM Mitarbeiter M WHERE Mitnr IN
  154. (SELECT Mitnr FROM MiPro GROUP BY Mitnr HAVING SUM(Planvzae)>1)
  155.  PRINT 'Anzahl Datensätze:%1!',@anz
  156. ROLLBACK TRANSACTION
  157. END
  158. ELSE
  159. BEGIN
  160. PRINT 'Datensätze erfolgreich eingefügt/geändert'
  161. PRINT 'Anzahl Datensätze:%1!',@anz
  162. END
  163.  
  164. 7.2)
  165.  
  166. CREATE TRIGGER del_mipro_proj
  167. ON MiPro
  168. FOR INSERT,UPDATE
  169. AS
  170. DECLARE @anz INT
  171. DECLARE @str VARCHAR(30)
  172. SELECT @anz=@@rowcount
  173. SELECT @str='Geänderte Datensätze ' + CAST(@anz AS VARCHAR)
  174.  
  175. BEGIN
  176. PRINT @str
  177. IF(EXISTS(SELECT SUM(Planvzae)-SUM(Istvzae) FROM MiPro GROUP BY Pronr HAVING SUM(Planvzae)-SUM(Istvzae) <=0))
  178. --Projektleiter
  179. SELECT M.* FROM Mitarbeiter M, Projekt P  WHERE M.Mitnr=Projleiternr AND Pronr  IN
  180.  (SELECT Pronr FROM MiPro MP GROUP BY Pronr HAVING SUM(MP.Planvzae)-SUM(MP.Istvzae) <=0)
  181. --Projektleiter=NULL
  182. UPDATE Projekt SET Projleiternr=NULL WHERE Pronr IN
  183. (SELECT Pronr FROM MiPro GROUP BY Pronr HAVING SUM(Planvzae)-SUM(Istvzae) <=0)
  184. --Delete in MiPro
  185. DELETE FROM MiPro WHERE Pronr IN (SELECT Pronr FROM MiPro MP
  186. GROUP BY Pronr HAVING SUM(MP.Planvzae)-SUM(MP.Istvzae)<=0)
  187. END
  188. UPDATE MiPro SET Istvzae=Planvzae WHERE Pronr='31'
  189.  
  190. 8.1.)
  191. CREATE TABLE Bprotokoll
  192. (
  193. Mitnr CHAR(5) PRIMARY KEY,
  194. Nutzer CHAR(16),
  195. Zeit datetime,
  196. Beruf_alt CHAR(15),
  197. Beruf_neu CHAR(15)
  198. )
  199.  
  200. 8.2)
  201. CREATE TRIGGER Mitprotokoll
  202. ON Mitarbeiter
  203. FOR UPDATE
  204. AS
  205. DECLARE @anz INT
  206. DECLARE @str VARCHAR(30)
  207. SELECT @anz=@@rowcount
  208. SELECT @str='Geänderte Datensätze ' + CAST(@anz AS VARCHAR)
  209.  
  210. BEGIN
  211. PRINT @str
  212. IF(EXISTS (SELECT * FROM Mitarbeiter WHERE Beruf  NOT IN (SELECT Beruf FROM inserted)))
  213. -->beruf wurde geupdated
  214. BEGIN
  215. SELECT I.Beruf INTO Bprotokoll.Beruf_neu FROM inserted I
  216. SELECT I.Mitnr, user_name(), getdate(),I.Beruf
  217.  
  218. END
Add Comment
Please, Sign In to add comment