Advertisement
lukifrancuz

BD3_K2_Z1234_g2

Jan 19th, 2023
1,993
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 4.07 KB | None | 0 0
  1. use TSQL2012
  2.  
  3. --Zadanie wstępne:
  4. --Utworzyć tabelę Logi, w której są kolumny id (identyfikator loga), opis , operacja (insert, update lub delete), dataoperacji.
  5. create table Logi(
  6.     id int identity(1,1) not null,
  7.     opis varchar(100) not null,
  8.     operacja varchar(20) not null,
  9.     dataoperacji date not null
  10.     )
  11. go
  12.  
  13. --1. Utworzyć trigger instead of delete dla tabeli Sales.Orders, który kasuje wszystkie rekordy razem z powiązanymi danymi z Sales.OrderDetails.
  14. --Wpisuje do tabeli Logi informację w postaci  (opis , operacja, dataoperacji)
  15. --jako ('Skasowano x rekordów z Order i y rekordów z OrderDetails', 'delete', bieżąca data)
  16. --Obsłużyć wyjątki, transakcje jeśli to wskazane.
  17. create trigger t_sales_delete
  18. on Sales.Orders
  19. instead of delete
  20. as
  21. begin
  22.     declare @deletedOrders int;
  23.     declare @deletedDetails int;
  24.     set @deletedOrders = (select count(*) from deleted)
  25.     set @deletedDetails = (select count(*) from Sales.OrderDetails where orderid in (select orderid from deleted))
  26.     delete from Sales.OrderDetails where orderid = (select orderid from deleted);
  27.     delete from Sales.Orders where orderid = (select orderid from deleted);
  28.     insert into Logi (opis, operacja, dataoperacji)
  29.         values (concat('Skasowano ', @deletedOrders, ' rekordow z tabeli Order i ', @deletedDetails, ' rekordów z OrderDetails'),
  30.             'delete', getdate())
  31. end
  32. go
  33.  
  34. delete from Sales.Orders where orderid = 10248
  35.  
  36. select * from Sales.Orders where orderid = 10248
  37. select * from Sales.OrderDetails  where orderid = 10248
  38.  
  39. select * from Logi
  40. go
  41. --2. Utworzyć trigger after update dla tabeli Production.Categories, który zapisuje
  42. --do tabeli Logi informację w postaci  (opis , operacja, dataoperacji)
  43. --jako ('Zmieniono nazwę(opis) kategorii z xx na yy', 'update', bieżąca data)
  44. --Obsłużyć wyjątki, transakcje jeśli to wskazane.
  45.  
  46. create trigger t_categ_update
  47. on Production.Categories
  48. after update
  49. as
  50. begin
  51.     if @@rowcount=0 return
  52.     --set nocount on
  53.     declare @loginfo varchar(100);
  54.     set @loginfo = 'Zmieniono ';
  55.    
  56.     if ((select categoryname from inserted) != (select categoryname from deleted))
  57.     begin
  58.         set @loginfo += concat('nazwe kategorii z ', (select categoryname from deleted),
  59.             ' na ', (select categoryname from inserted), ', ');
  60.     end
  61.    
  62.     if ((select description from inserted) != (select description from deleted))
  63.     begin
  64.         set @loginfo += concat('opis kategorii z ', (select description from deleted),
  65.             ' na ', (select description from inserted), ', ');
  66.     end
  67.  
  68.     insert into Logi (opis, operacja, dataoperacji)
  69.         values (@loginfo, 'update', getdate())
  70. end
  71. go
  72.  
  73. select * from Production.Categories
  74. insert into Production.Categories (categoryname, description) values ('testowa', 'kategoria')
  75.  
  76. update Production.Categories set categoryname = 'NOWA', description = 'DOBRY OPIS' where categoryname = 'testowa'
  77.  
  78. select * from Logi
  79.  
  80. --3.Zaimportować dane z xml Shippers.xml (zalecane MERGE)
  81. --Gdy companyname jest w bazie zrobić update rekordu używając nowych danych z XML,
  82. --w przeciwnym wypadku dodać nowy rekord.
  83. merge Sales.Shippers as target
  84. using (
  85.     select
  86.        MY_XML.Company.query('companyname').value('.', 'nvarchar(40)') as companyname,
  87.        MY_XML.Company.query('phone').value('.', 'nvarchar(24)') as phone
  88.     from (select cast(MY_XML as xml)
  89.           from openrowset(bulk 'C:\Users\Programista\Documents\LK\bazy\kolokwium 2\Shippers.xml', single_blob)
  90.           as T(MY_XML)) AS T(MY_XML)
  91.           cross apply MY_XML.nodes('Shippers/Company') as MY_XML (Company)
  92. ) as source
  93. on target.companyname = source.companyname
  94. when matched then update set phone = source.phone
  95. when not matched then insert(companyname, phone) values(source.companyname, phone);
  96.  
  97. select * from Sales.Shippers
  98. go
  99.      
  100. --4. Wyliczyć 8! korzystając z CTE
  101. with factorials(n, factorial) as (
  102.   select 1, 1
  103.   union all
  104.   select n + 1, (n + 1) * factorial from factorials where n < 8
  105. )
  106. select factorial from factorials where n = 8;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement