MagnusArias

BD | trigger, transaction

Jun 13th, 2016
276
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 3.88 KB | None | 0 0
  1. CREATE TRIGGER nazwaTriggera ON {tableName | viewName}
  2. {FOR |after | instead OF}
  3. {[INSERT][,][UPDATE][,][DELETE]}
  4. AS
  5.     // isnturkcje
  6. GO
  7.  
  8. CREATE TABLE tabOsoba(
  9.     imie VARCHAR(20),
  10.     nazwisko VARCHAR(20),
  11.     wiek INT);
  12.  
  13. CREATE TRIGGER info ON tabOsoba after INSERT AS
  14. print ('Do tabeli tabOsoba został wprowadzony nowy rekord');
  15. GO
  16.  
  17. INSERT INTO tabOsoba VALUES('janek',' wisniewski', 5);
  18.  
  19. DROP TRIGGER info;
  20. DROP TABLE tabOsoba;
  21.  
  22.  
  23.  
  24. SELECT Imie, Nazwisko, rokUrodz, Wzrost, idSzefa INTO tabOsoby FROM Osoby; // <-- kopiowanie elemnentow  ztabeli do tabeli
  25.  
  26. CREATE TRIGGER info ON tabOsoby after UPDATE AS
  27. print 'Dane zostaly zaktualizowane';
  28. GO
  29.  
  30. UPDATE tabOsoby SET IdSzefa=3 WHERE RokUrodz > 1950;
  31. SELECT * FROM tabOsoby;
  32. DROP TRIGGER info;
  33. DROP TABLE tabOsoby;
  34.  
  35.  
  36.  
  37. SELECT * INTO tabKlienci FROM Klienci;
  38. CREATE TRIGGER info2 ON tabKlienci after DELETE AS
  39. print 'usunieto after'
  40. GO
  41.  
  42. CREATE TRIGGER info3 ON tabKlienci instead OF DELETE AS
  43. print 'usunieto instead'
  44. GO
  45.  
  46. DELETE FROM tabKlienci WHERE IdKlienta = 4765;
  47.  
  48. DROP TRIGGER info2;
  49. DROP TRIGGER info3;
  50.  
  51.  
  52. BEGIN tran
  53. commit tran
  54. ROLLBACK tran
  55.  
  56. poziomy izolazji:
  57. read_uncommitted
  58. read_committed
  59. reteapable_read
  60.  
  61. SET TRANSACTION isolation level read_uncommitted;
  62. dbcc useroptions;
  63.  
  64.  
  65.  
  66. SELECT * INTO dzialy1 FROM Dzialy;
  67.  
  68. SELECT * FROM dzialy1;
  69. SELECT top 20 percent * FROM dzialy1;
  70.  
  71.  
  72. // pobeira dwa rekordy pomijajac pierwsze 5
  73. SELECT * FROM Dzialy ORDER BY IdDzialu
  74. offset 5 ROWS fetch FIRST 2 ROWS ONLY;
  75.  
  76. // pobeira rekordy pomijajac pierwsze 5
  77. SELECT * FROM Dzialy ORDER BY IdDzialu
  78. offset 5 ROWS
  79.  
  80. // pobeira pierwszyhc 6 rekordow
  81. SELECT * FROM Dzialy ORDER BY IdDzialu
  82. offset 0 ROWS fetch FIRST 6 ROWS ONLY;
  83.  
  84. SELECT IdZarobku, IdOsoby, Brutto,
  85. ROW_NUMBER()
  86. OVER (partition BY idOsoby ORDER BY Brutto) FROM Zarobki;
  87.  
  88. SELECT IdZarobku, IdOsoby, Brutto,
  89. ROW_NUMBER()
  90. OVER (ORDER BY Brutto) AS nr FROM Zarobki;
  91.  
  92. SELECT IdZarobku, IdOsoby, Brutto,
  93. lag(Brutto)
  94. OVER (partition BY idOsoby ORDER BY Brutto) FROM Zarobki;
  95.  
  96. SELECT IdZarobku, IdOsoby, Brutto,
  97. lead(Brutto)
  98. OVER (partition BY idOsoby ORDER BY Brutto) FROM Zarobki;
  99.  
  100.  
  101.  
  102. /* zad1.
  103. wybierz klientów, których imie rozpoczyna się na jedną z liter:A,B,C,D,E lub w nazwisku wystepuje litera H.
  104. Posortuj klientów wg imienia
  105. */
  106. SELECT * FROM Klienci WHERE
  107. Imie LIKE '[ABCDE]%' OR Nazwisko LIKE '%H%';
  108.  
  109.  
  110. /* zad2.
  111. Utwórz funkcję pokazKlientow pobierającą 1 znak i zwracającą klientów, których nazwiska rozpoczynają się na przekazaną literę.
  112. Wywołaj funkcję wybierając tylko nazwiska i imiona klientów.
  113. */
  114. CREATE FUNCTION dbo.pokazKlientow( @znak CHAR(1) ) RETURNS TABLE
  115. AS
  116.     RETURN (SELECT * FROM Klienci WHERE Nazwisko LIKE @znak+'%');
  117. GO
  118.  
  119. SELECT Nazwisko, Imie FROM pokazKLientow('n');
  120.  
  121.  
  122. CREATE FUNCTION pokazKlientow2 (@znak CHAR(1))
  123. RETURNS @tab TABLE (nazwisko VARCHAR(50), imie VARCHAR(50))
  124. AS
  125. BEGIN
  126. INSERT INTO @tab SELECT Nazwisko, imie FROM KLienci WHERE nazwisko LIKE @znak+'%';
  127. RETURN;
  128. END;
  129. GO
  130.  
  131. SELECT Nazwisko, Imie FROM pokazKLientow2('n');
  132.  
  133.  
  134. /* zad3.
  135. utwórz procedurę, która pobiera parametr w postaci roku zatrudnienia
  136. i zwraca w postaci parametru wyjściowego liczbę osób zatrudnionych w tym roku.
  137. */
  138. CREATE PROCEDURE liczbaZatrudnionych @rok INT, @liczba INT OUTPUT
  139. AS
  140. SELECT @liczba = COUNT(idOsoby)FROM Osoby WHERE YEAR(DataZatr)=@rok;
  141. GO
  142.  
  143. DECLARE @ile INT;
  144. EXEC liczbaZatrudnionych 2003, @ile output
  145. SELECT @ile;
  146.  
  147. SELECT * FROM osoby WHERE YEAR(DataZatr)=2003
  148.  
  149.  
  150. /* zad4.
  151. Utwórz trigger, który będzie blokował zarówno wstawianie, jak i usuwanie danych do tabeli Dzialy,
  152. a podczas próby dokonania takich zmian wyświetli informację 'Wykonano próbe wstawienia lub modyfikacji danych w tabeli Działy'.
  153. usun trigger.
  154. */
  155. CREATE TRIGGER informacje
  156. ON Dzialy
  157. instead OF INSERT, UPDATE
  158. AS
  159. print 'Wykonano probe wstawienia lub modyfikacji danych tabeli'
  160.  
  161. DROP TRIGGER informacje
Add Comment
Please, Sign In to add comment