Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- --------------------------------------TRIGGER------------------------------------------
- /*
- create table [zarobki_audyt]
- (
- ID_zarobki_audyt bigint not null identity(1,1),
- ID_zarobki bigint not null,
- data datetime not null,
- brutto money not null,
- ID_pracownicy bigint not null,
- operacja varchar(6) not null,
- data_operacji datetime not null
- );
- alter table [zarobki_audyt] add constraint [PK_zarobki_audyt]
- primary key (ID_zarobki_audyt);
- go
- alter table [zarobki_audyt] add constraint [CHK_operacja]
- check(upper(operacja) = 'INSERT' or upper(operacja) = 'UPDATE' or upper(operacja) = 'DELETE');
- go
- --usuniêcie constrainta
- --alter table zarobki_audyt drop CHK_operacja
- create trigger tr_audyt
- on [zarobki]
- after INSERT, update, delete
- as
- begin
- if not exists (select * from [deleted]) and exists (select * from [INSERTed])
- begin
- INSERT into [zarobki_audyt] (ID_zarobki, data, brutto, ID_pracownicy, operacja, data_operacji)
- (select ID_zarobki, data, brutto, ID_pracownicy, 'INSERT', getdate() from [INSERTed]);
- end
- else if exists(select * from [deleted]) and not exists(select * from [INSERTed])
- begin
- INSERT into zarobki_audyt (ID_zarobki, data, brutto, ID_pracownicy, operacja, data_operacji)
- (select ID_zarobki, data, brutto, ID_pracownicy, 'UPDATE', getdate() from [deleted]);
- end
- else if exists(select * from [deleted]) and exists(select * from [INSERTed])
- begin
- INSERT into zarobki_audyt (ID_zarobki, data, brutto, ID_pracownicy, operacja, data_operacji)
- (select ID_zarobki, data, brutto, ID_pracownicy, 'UPDATE', getdate() from [deleted]);
- end
- end
- INSERT into [zarobki] (data, brutto, ID_pracownicy) values ('01/01/06', 1350, 1)
- select * from zarobki_audyt
- ____________________
- create trigger tr_zarobki
- on zarobki
- instead of delete
- as
- begin
- update zarobki set aktualny='nie'
- where zarID in (select zarID from deleted)
- end
- ____________________________
- Dodaj kolumnê tekstow¹ login1 do tabeli pracownicy.
- Przy tworzeniu nowego pracownika lub modyfikacji istniej¹cego
- w tabeli pracownicy ustawiaj wartoϾ kolumny login1
- na pierwsz¹ i ostatni¹ literê z imienia i pierwsz¹ i ostatni¹ liter¹ nazwiska. W tak stworzonej
- wartoœci zastosuj wielkie litery.
- Przyk³ad dla osoby: Tomasz Pawlak login1 bêdzie sk³¹da³ siê z TZPK
- alter table pracownicy add login1 varchar(10)
- alter trigger znaki on pracownicy
- for INSERT, update
- as
- begin
- declare @symbol_imie varchar(2)
- declare @symbol_nazwisko varchar(2)
- declare @symbol varchar(4)
- declare @imie_wynik varchar(10)
- declare @nazwisko_wynik varchar(10)
- declare @pracid_wynik varchar(10)
- set @imie_wynik=(select imie from INSERTed)
- set @nazwisko_wynik=(select nazwisko from INSERTed)
- set @pracid_wynik=(select ID_pracownicy from INSERTed)
- set @symbol_imie = SUBSTRING(@imie_wynik, 1, 1) + SUBSTRING(@imie_wynik, len(@imie_wynik), len(@imie_wynik));
- set @symbol_nazwisko = SUBSTRING(@nazwisko_wynik, 1, 1) + SUBSTRING(@nazwisko_wynik, len(@nazwisko_wynik), len(@nazwisko_wynik));
- set @symbol = upper(@symbol_imie + @symbol_nazwisko)
- update pracownicy set login1 = @symbol where ID_pracownicy = @pracid_wynik
- end
- INSERT into pracownicy(nazwisko,imie) values('Ziomet','Damiax');
- update pracownicy set imie = 'Darek' where ID_pracownicy = 2
- select * from pracownicy
- _____________________________
- Do tabeli dzia³y dopisz kolumnê data_przyjêcia.
- Przy tworzeniu nowego pracownika z ustawionym dzia³em
- ustawiaj wartoœæ kolumny data_przyjêcia dla zadanego dzia³u
- wpisuj¹c w ni¹ komunikat z obecn¹ dat¹ oraz imieniem i nazwiskiem pracownika.
- Format komunikatu:
- 'Ostatni zatrudniony pracownik Jan Kowalski: Dec 18 2006 9:01PM'
- select * from dzialy
- alter table dzialy add data_przyjecia varchar(150)
- alter trigger tr_dzial
- on pracownicy
- for INSERT
- as
- begin
- declare @dzialID integer,
- @imie varchar(32),
- @nazwisko varchar(32),
- @ins varchar(150)
- set @dzialID=(select dzialID from INSERTed)
- if @dzialID is not null
- begin
- set @imie=(select imie from INSERTed)
- set @nazwisko=(select nazwisko from INSERTed)
- set @ins=('Ostatni zatrudniony pracownik '+@imie+' '+@nazwisko+': '+convert(char(20), GETDATE(),109))
- update dzialy set data_przyjecia = @ins
- where dzialID = @dzialID
- end
- end
- select * from pracownicy
- select * from dzialy
- INSERT into pracownicy(imie, nazwisko, dzialID, wiek) values ('Imie', 'Nazwisko', 3, 25)
- INSERT into pracownicy(imie, nazwisko) values ('Imie', 'Nazwisko')
- ______________________________
- Stworzyæ wyzwalacz (trigger) na tabeli – zamowienia – który uruchomiony jest po wstawieniu rekordu do tej tabeli.
- Wyzwalacz ma wstawiæ do tabeli – dane – dane klienta z tabeli – klienci – oraz zaktualizowaæ kolumny w tabeli – zamowienia:
- - numer zamówienia – zwiêkszyæ o 1 ostatni¹ wartoœæ;
- - data realizacji zamówienia – dodaæ 7 dni do daty dodania zamówienia.
- create trigger zadanie1 on zamowienia
- for INSERT
- as
- begin
- INSERT into dane (imie, nazwisko, adres, miasto, kod_pocztowy) values
- ((select imie from klienci), (select nazwisko from klienci),(select adres from klienci),
- (select miasto from klienci), (select kod_pocztowy from klienci) )
- update zamowienia set ID_zamowienia = ID_zamowienia + 1 where ID_zamowienia =
- (select ID_zamowienia from INSERTed)
- update zamowienia set Data_dos = dateadd(day,7,data_zam) where ID_zamowienia =
- (select ID_zamowienia from INSERTed)
- end
- ___________________________
- Do tabeli pracownicy dodaj kolumnê tekstow¹ last_sallary.
- Przy tworzeniu nowego wpisu w tabeli zarobki ustawiaj wartoϾ nowo dodanej kolumny
- dla pracownika, który otrzyma³ wynagrodzenie wpisuj¹c w ni¹ komunikat z obecn¹ dat¹.
- Wymagany format komunikatu:
- 'Data ostatniej wyp³aty: Jan 03 2006 10:11PM'
- alter table pracownicy alter column last_sallary varchar(50)
- select * from pracownicy
- select * from zarobki
- alter trigger zad2 on zarobki
- for INSERT,update
- as
- begin
- update pracownicy set last_sallary = ('Data ostatniej wyp³aty: ' + (convert(varchar,getdate())))
- where pracID = (select pracID from INSERTed)
- end
- INSERT into zarobki (brutto,pracID) values (12345,6)
- _______________________________
- stwórz triggera który przenosi dane dotycz¹ce zarobków
- do tabeli historycznej bêd¹cej dok³adn¹ kopi¹ tabeli
- zarobki bez kolumny aktualny. Uwzglêdnij w tej tabeli datêf
- przenosin oraz u¿ytkownika który kasowa³ dane
- create table zapasowa(
- ID_zarobki int, data datetime, brutto money, ID_pracownicy int,
- dataprzeniesienia datetime, kto varchar(30))
- ;
- alter trigger kopia_ on zarobki
- for delete
- as begin
- INSERT into zapasowa(ID_zarobki, data, brutto, ID_pracownicy, dataprzeniesienia, kto)
- (select ID_zarobki, data, brutto, ID_pracownicy, getdate(), user from deleted);
- end
- go
- INSERT into zarobki
- values ('2014-07-07', 1000, 3);
- delete from zarobki
- where ID_zarobki = 28
- select * from zapasowa
- SELECT 'DROP TRIGGER ' + name
- FROM sysobjects
- WHERE type = 'tr'
- _____________
- Do tabeli pracownicy dodaj kolumne tekstowa email o dlugosci 100 znakow.
- Podczas tworzenia pracownika lub jego modyfikacji uzupe³nij t¹ kolumnê
- emailem skladaj¹cym siê z:
- pierwszych trzech liter imienia, kropki,
- pierwszych piêciu liter nazwiska oraz ci¹gu '@p.lodz.pl'
- Pamiêtaj, aby usun¹c ewentualne zewnêtrzne bia³e znaki oraz
- aby zamienic wewnêtrzne spacje na znak podkreslenia.
- select * from pracownicy
- alter table pracownicy add email varchar(100)
- create trigger zadanie4 on pracownicy
- for INSERT, update
- as
- begin
- declare @imie varchar(20) = (select imie from INSERTed)
- declare @nazwisko varchar(40) = (select nazwisko from INSERTed)
- declare @wynik varchar(30) = ''
- set @wynik = LEFT(@imie,3) + '.' + LEFT(@nazwisko, 5) + '@p.lodz.pl'
- update pracownicy set email = @wynik where imie = (select imie from INSERTed)
- and nazwisko = (select nazwisko from INSERTed)
- end
- INSERT into pracownicy(imie, nazwisko, email) values ('Janusz', 'Nowacki')
- ---------------------PROCEDURES-----------------------------
- _________________________
- alter procedure zadanie
- @data datetime = null
- as
- begin
- if @data is null
- begin
- set @data = GETDATE()
- print 'Dzisiaj mamy: '+cast(@data as varchar)
- end
- select case DATEPART (dw,@data)
- when 1 then 'niedziela'
- when 2 then 'poniedzia³ek'
- when 3 then 'wtorek'
- when 4 then 'œroda'
- when 5 then 'czwartek'
- when 6 then 'pi¹tek'
- when 7 then 'sobota'
- end
- end
- go
- exec zadanie
- exec zadanie '24/05/2008'
- ___________________________
- Utwórz procedurê , która wyœwietli w formie tekstowej (w oknie messages)
- wszystkich pracowników i liczbê ich wyp³at. Pod uwagê bierz tylko tych pracowników,
- którzy posiadaj¹ wiêcej ni¿ X (gdzie X to pierwszy parametr procedury)
- wpisów w tabeli zarobki. Dodatkowo wybierz tylko te wpisy, które zosta³y stworzone po
- dacie podanej w drugim parametrze. W przypadku nie podania w wywo³aniu procedury
- drugiego parametru nie uwzglêdniaj kryterium daty.
- Przyk³adowy wynik wywo³ania:
- 'Pracownik Jan Kowalski od dnia Jan 1 2001 12:00AM otrzyma³ 5 wyp³at'
- lub
- 'Pracownik Jan Kowalski otrzyma³ 5 wyp³at'
- alter proc qqwe11
- @quantity int,
- @data_od date =''
- AS
- BEGIN
- declare @temporary table(id int identity (1,1), imie varchar(20), nazwisko varchar(20), ID_pracownicy int , ile int)
- declare @output varchar (100)
- declare @i int
- if @data_od IS NULL
- begin
- INSERT into @temporary(imie, nazwisko, ID_pracownicy, ile)
- SELECT t1.imie, t1.nazwisko, t1.ID_pracownicy, t1.ile FROM
- (
- select COUNT(*) as ile, zarobki.ID_pracownicy, pracownicy.imie, pracownicy.nazwisko from zarobki
- JOIN pracownicy
- on pracownicy.ID_pracownicy = zarobki.ID_pracownicy
- group by zarobki.ID_pracownicy, pracownicy.imie, pracownicy.nazwisko
- ) as t1
- where t1.ile >= @quantity
- set @i=(select COUNT(*) from @temporary)
- while (@i > 0)
- begin
- set @output=concat('Pracownik ',(select imie from @temporary where id=@i),' ',(select nazwisko from @temporary where id=@i),' otrzymal ',(select ile from @temporary where id=@i),' wyplat')
- print @output
- set @i-=1
- end
- end
- else
- begin
- INSERT into @temporary(imie, nazwisko, ID_pracownicy, ile)
- SELECT t1.imie, t1.nazwisko, t1.ID_pracownicy, t1.ile FROM
- (
- select COUNT(*) as ile, zarobki.ID_pracownicy, pracownicy.imie, pracownicy.nazwisko from zarobki
- JOIN pracownicy
- on pracownicy.ID_pracownicy = zarobki.ID_pracownicy
- where data >= @data_od
- group by zarobki.ID_pracownicy, pracownicy.imie, pracownicy.nazwisko
- ) as t1
- where t1.ile >= @quantity
- set @i=(select COUNT(*) from @temporary)
- while (@i > 0)
- begin
- set @output=concat('Pracownik ',(select imie from @temporary where id=@i),' ',(select nazwisko from @temporary where id=@i),' otrzymal ',(select ile from @temporary where id=@i),' wyplat/y')
- print @output
- set @i-=1
- end
- end
- END
- exec qqwe11 2, '2005/01/01'
- ______________________________________
- Stwórz procedurê, która wyœwietli w formie tekstowej (w oknie messages) co drugiego pracownika
- pracownika, którego nazwisko zaczyna siê na literê podan¹ w parametrze. W przypadku nie podania
- parametru uwzglêdniaj tylko osoby o nazwisku na literê 'Z'. W przypadku podania w parametrze wartosci
- null nie uwzglêdniaj kryterium.
- alter procedure qwerty
- @param varchar(1) = '0'
- AS
- begin
- declare @flag as int
- if @param = '0'
- set @flag = 1
- if @param IS NOT NULL
- begin
- if @flag = 1
- begin
- Select imie, nazwisko From
- (
- Select imie, nazwisko, Row_number() over(order by imie) as 'pozycja'
- from pracownicy
- where imie like 'Z%'
- ) as t1
- where t1.pozycja % 2 =0
- end
- else
- begin
- Select imie, nazwisko From
- (
- Select imie, nazwisko, Row_number() over(order by imie) as 'pozycja'
- from pracownicy
- where imie like @param + '%'
- ) as t1
- where t1.pozycja % 2 =0
- end
- end
- else
- begin
- Select imie, nazwisko From
- (
- Select imie, nazwisko, Row_number() over(order by imie) as 'pozycja'
- from pracownicy
- ) as t1
- where t1.pozycja % 2 = 0
- end
- end
- exec dbo.qwerty 'J' -- Null -- pusto
- ______________________________________
- Procedura wybieraj¹ca nazwiska pracowników których œrednie zarobki s¹ najwy¿sze
- lub równe parametru wejsciowemu
- Albo (Procedura wybieraj¹ca pracowników których œrednie zarobki s¹ najwy¿sze
- lub najni¿sze) (zak³adamy unikatowoœæ nazwisk pracownikow)
- drop proc procedura_2
- go
- create proc procedura_2
- @wej_srd money
- as
- begin
- select nazwisko, AVG(brutto) sred from pracownicy p
- join zarobki z on z.pracID=p.pracID
- group by p.nazwisko
- having AVG(brutto)=
- (
- select MAX(wynik.sred) from
- (
- select nazwisko, AVG(brutto) sred from pracownicy p
- join zarobki z on z.pracID=p.pracID
- group by p.nazwisko
- ) wynik
- )
- union
- select nazwisko, AVG(brutto) sred from pracownicy p
- join zarobki z on z.pracID=p.pracID
- group by p.nazwisko
- having AVG(brutto)= @wej_srd
- end;
- go
- exec procedura_2 5600
- _______________________
- drop proc procedura_3
- go
- create proc procedura_3
- @ilosc integer
- as
- begin
- declare @nazw varchar(50)
- set @nazw='puste'
- print @nazw
- select @nazw = nazwisko from pracownicy
- order by nazwisko
- print @nazw
- if LEN(@nazw)>10
- print 'Wieksza'
- else print 'Mniejsza'
- declare @i integer
- set @i = 0
- while @i < @ilosc
- begin
- print 'Przebieg nr '+cast(@i as varchar)
- set @i = @i+1
- end
- end
- go
- exec procedura_3 1000
- __________________
- --zwróc adres w po0staci
- --Piotrkowska
- --123/23
- --m.30
- --90-123
- --£ódŸ
- alter procedure adres
- @adres_caly varchar(100)
- as
- begin
- declare @dl_ul int
- declare @pozycja int
- declare @reszta varchar(100)
- set @reszta = @adres_caly
- set @pozycja = CHARINDEX(' ',@reszta)
- print substring(@reszta,0,@pozycja+1)
- while(LEN(@reszta)>2)
- begin
- set @reszta=SUBSTRING(@reszta,@pozycja+1,LEN(@reszta))
- set @pozycja = CHARINDEX(' ',@reszta)
- print substring(@reszta,0,@pozycja+1)
- end
- end
- exec adres 'piotrkowska 123/23 m.30 90-123 lodz '
- ---------------------------FUNCTIONS----------------------------------
- Dodaj funkcjê fun_kol, która zwróci tekstow nazwê dnia tygodnia powsta³¹
- z daty powsta³ej z dodania X dni (gdzie X to drugi parametr) do daty podanej
- w pierwszym parametrze.
- W przypadku ustawienia null w parametrze X dodaj 10 dni. Przyk³adowy wynik wywo³ania funkcji:
- 'Otrzymany dzieñ to: Sunday'
- alter function fun_kol(@data1 date, @dni int)
- returns varchar(100)
- as
- begin
- declare @wynik varchar(100)
- if @dni is null
- set @dni = 10
- set @wynik = 'Otrzymany dzien to: ' + convert(Varchar,datename(dw,dateadd(day,@dni,@data1)))
- return @wynik
- end
- select dbo.fun_kol('2017-02-02',22)
- select dbo.fun_kol('2017-02-02',null)
- ________________
- Utwórz funkcje, która bêdzie zwracaæ powtórzony ciag znaków podany w parametrze tyle razy
- ile podane to bêdzie w nastêpnym parametrze. Co drugie powielenie ci¹gu wejœciowego ma mieæ
- odwrócon¹ kolejnoœæ znaków poczynaj¹c od pierwszego. Pomiedzy powieleniami dodaj podkreslnik.
- Przyk³adowe wywo³anie dla ci¹gu 'XYZ' i powielenia 3 - 'ZYX_XYZ_ZYX'.
- alter function zad5(@ciag varchar(10), @powt int) RETURNS varchar(100)
- AS
- BEGIN
- declare @i int;
- declare @zwrot varchar(30);
- set @i= 1
- set @zwrot=@ciag
- while @i < @powt
- begin
- set @i += 1
- set @zwrot=CONCAT(@zwrot, '_')
- if(@i%2=0)
- begin
- set @zwrot=CONCAT(@zwrot, reverse(@ciag))
- end
- else
- begin
- set @zwrot=CONCAT(@zwrot, @ciag)
- end
- end
- RETURN @zwrot
- END
- select dbo.zad5('xyz', 6)
- ______________________________________
- Utwórz funkcjê, która bêdzie zwracaæ komunikat o ró¿nicy w dniach
- miêdzy dat¹ bie¿¹c¹ a dat¹ podan¹ w parametrze.
- W przypadku tego samego dnia zwróæ komunikat o równoœci dat.
- Przyk³ad:
- 'Miêdzy dat¹ obecn¹ a dat¹ Dec 12 2012 12:00AM jest XXX dni ró¿nicy.'
- lub
- 'Daty data podana w parametrze jest dat¹ dzisiejsz¹.'
- alter function checkData (@data date) returns varchar(150)
- as
- begin
- declare @output varchar(150)
- declare @difference int
- set @difference = DATEDIFF(day, @data, GETDATE()) ;
- if @difference >= 1 OR @difference <= -1
- begin
- set @output = 'Różnica pomiędzy ' + CONVERT(varchar(10),@data) +
- ' a dziejszą datą to ' + convert(varchar(2),@difference)+' dni/dzien';
- end
- else
- begin
- set @output = 'To dziś !';
- end
- return @output
- end
- select dbo.checkData('06/20/2017')
- ______________________________________
- Case z mlody,stary + tabela
- alter function Wiek(@wiek int)
- returns varchar(max)
- as
- begin
- declare @wynik varchar(max);
- if @wiek < 25
- begin
- set @wynik = 'Mlody';
- end
- else if @wiek >= 26 and @wiek <= 45
- begin
- set @wynik = 'Œredni';
- end
- else if @wiek >= 45
- begin
- set @wynik = 'Stary';
- end
- else
- begin
- set @wynik = 'Nieznany';
- end
- return @wynik;
- end;
- select imie,nazwisko,wiek, dbo.Wiek(wiek)
- as 'Jaki wiek' from pracownicy
- ______________________________________
- --Liczenie pola kwadratu, prostok¹ta, ko³a, trójk¹ta, rombu i równoleg³oboku
- alter function Pola(@figura varchar(20),
- @bok1 float, @bok2 float =0)
- returns float
- as
- begin
- declare @wynik float;
- if lower(@figura) = 'kwadrat'
- begin
- set @wynik = dbo.potega(@bok1);
- end
- else if lower(@figura) = 'prostok¹t'
- begin
- set @wynik = @bok1 * @bok2;
- end
- else if lower(@figura) = 'ko³o'
- begin
- set @wynik = PI()*dbo.potega(@bok1);
- end
- else if lower(@figura) = 'romb' or lower(@figura) = 'równoleg³obok'
- begin
- set @wynik = @bok1 * @bok2;
- end
- else if lower(@figura) = 'trójk¹t'
- begin
- set @wynik = (@bok1 * @bok2)/2;
- end
- return @wynik;
- end;
- ___________________________
- stwórz funkcjê, która bêdzie przyjmowaæ 2 argumenty bêd¹ce ci¹gami znaków (maksymalnie do 100 znaków) i zwróci ci¹g znaków
- powsta³y z wymieszania na przemian znaków
- PRZYK£AD:
- funkcja('ABCDE','12345') zwróci: 5E4D3C2B1A
- W przypadku niezgodnoœci d³ugoœci ci¹gów wejœciowych wyœwietl komunikat typu: 'B³¹d d³ugoœci znaków X<>Y'
- gdzie X i Y to d³ugoœci ci¹gów wejœciowych
- create function mieszanie(@nap1 varchar(100), @nap2 varchar(100))
- returns varchar(200)
- as
- begin
- if LEN(@nap1) != LEN(@nap2)
- return 'B³¹d d³ugoœci znaków: ' + cast(len(@nap1) as varchar)+' <> '+ cast(len(@nap2) as varchar)
- declare @licznik int;
- declare @result varchar(200);
- set @licznik = 0;
- set @result = '';
- while (@licznik <= LEN(@nap1))
- begin
- set @licznik = @licznik + 1
- set @result = @result + SUBSTRING (@nap1, @licznik - 1,1)
- set @result = @result + SUBSTRING (@nap2, @licznik - 1,1)
- end
- return reverse(@result)
- end
- select dbo.mieszanie('ABCDEAAAAAAAAAAAAAAAAA','4254252354234124523451')
- ______________________________
- create function dbo.Split(@string varchar(max),
- @delimiter varchar(5))
- returns @wynik table(tekst varchar(max))
- as
- begin
- declare @poczatek int;
- declare @koniec int;
- set @poczatek = 1
- set @koniec = CHARINDEX(@delimiter, @string);
- while @poczatek <= LEN(@string)
- begin
- if @koniec = 0
- set @koniec = LEN(@string) + 1;
- INSERT into @wynik(tekst)
- values (SUBSTRING(@string, @poczatek, @koniec - @poczatek));
- set @poczatek = @koniec + 1;
- set @koniec = CHARINDEX(@delimiter, @string, @poczatek);
- end
- return;
- end;
- select * from dbo.split('1,2,3,4,5,6',',');
- */
- ________________***********++++++++++++++++++************_______________________
- alter procedure qwerty
- @param varchar(1) = '0'
- AS
- begin
- declare @flag as int
- if @param = '0'
- set @flag = 1
- declare @temporary table(id int identity (1,1), imie varchar(20), nazwisko varchar(20))
- declare @output varchar (100)
- declare @i int
- if @param IS NOT NULL
- begin
- if @flag = 1
- begin
- INSERT into @temporary(imie, nazwisko)
- Select imie, nazwisko From
- (
- Select imie, nazwisko, Row_number() over(order by imie) as 'pozycja'
- from pracownicy
- where imie like 'Z%'
- ) as t1
- where t1.pozycja % 2 =0
- set @i=(select COUNT(*) from @temporary)
- while (@i > 0)
- begin
- set @output=concat((select imie from @temporary where id=@i),' ',(select nazwisko from @temporary where id=@i))
- print @output
- set @i-=1
- end
- end
- else
- begin
- INSERT into @temporary(imie, nazwisko)
- Select imie, nazwisko From
- (
- Select imie, nazwisko, Row_number() over(order by imie) as 'pozycja'
- from pracownicy
- where imie like @param + '%'
- ) as t1
- where t1.pozycja % 2 =0
- set @i=(select COUNT(*) from @temporary)
- while (@i > 0)
- begin
- set @output=concat((select imie from @temporary where id=@i),' ',(select nazwisko from @temporary where id=@i))
- print @output
- set @i-=1
- end
- end
- end
- else
- begin
- INSERT into @temporary(imie, nazwisko)
- Select imie, nazwisko From
- (
- Select imie, nazwisko, Row_number() over(order by imie) as 'pozycja'
- from pracownicy
- ) as t1
- where t1.pozycja % 2 = 0
- set @i=(select COUNT(*) from @temporary)
- while (@i > 0)
- begin
- set @output=concat((select imie from @temporary where id=@i),' ',(select nazwisko from @temporary where id=@i))
- print @output
- set @i-=1
- end
- end
- end
- exec dbo.qwerty NULL
- /*
- Do tabeli pracownicy dodaj kolumne tekstowa poczta o dlugosci 200 znakow.
- Podczas dodawania i modyfikacji osoby ustaw tą kolumnę ciągiem złożonym z:
- pierwszych 5 liter nazwiska, myślnika,
- pierwszych trzech liter imienia oraz ciągu '@wp.pl'
- Pamiętaj, aby usunąc ewentualne zewnętrzne białe znaki oraz
- aby zamienic wewnętrzne spacje na znak '_'.
- */
- select * from pracownicy
- alter table pracownicy add poczta varchar(200)
- create trigger zadanie4 on pracownicy
- for INSERT, update
- as
- begin
- declare @imie varchar(20) = (select imie from INSERTed)
- declare @nazwisko varchar(40) = (select nazwisko from INSERTed)
- declare @wynik varchar(30) = ''
- set @wynik = LEFT(@nazwisko,5) + '-' + LEFT(@imie, 3) + '@wp.pl'
- update pracownicy set poczta = @wynik where imie = (select imie from INSERTed)
- and nazwisko = (select nazwisko from INSERTed)
- end
- INSERT into pracownicy(imie, nazwisko, email) values ('Janusz', 'Nowacki')
- /*
- Utwórz funkcję, która będzie zwracać komunikat o różnicy w dniach
- między datą bieżącą a datą podaną w parametrze.
- W przypadku tego samego dnia zwróć komunikat o równości dat.
- Przykład:
- 'Między datą obecną a datą Dec 12 2012 12:00AM jest XXX dni różnicy.'
- lub
- 'Daty data podana w parametrze jest datą dzisiejszą.'
- */
- alter function checkData (@dat date) returns varchar(150)
- as
- begin
- declare @ret1 varchar(150), @rozn int
- set @rozn = DATEDIFF(day, @dat, GETDATE()) ;
- if @rozn >= 1
- begin
- set @ret1 = 'Data ' + CONVERT(varchar(20),@dat) + ' rozni sie o ' + convert(varchar(3),@rozn)+' dni';
- end
- else
- begin
- set @ret1 = 'Data podana w parametrze jest data dzisiejsza';
- end
- return @ret1
- end
- select dbo.checkData('06/20/2017')
- /*
- Stworzyć wyzwalacz (trigger) na tabeli – zamowienia – który uruchomiony jest po wstawieniu rekordu do tej tabeli.
- Wyzwalacz ma wstawić do tabeli – dane – dane klienta z tabeli – klienci – oraz zaktualizować kolumny w tabeli – zamowienia:
- - numer zamówienia – zwiększyć o 1 ostatnią wartość;
- - data realizacji zamówienia – dodać 7 dni do daty dodania zamówienia.
- */
- create trigger zadanie1 on zamowienia
- for INSERT
- as
- begin
- INSERT into dane (imie, nazwisko, adres, miasto, kod_pocztowy) values
- ((select imie from klienci), (select nazwisko from klienci),(select adres from klienci),
- (select miasto from klienci), (select kod_pocztowy from klienci) )
- update zamowienia set ID_zamowienia = ID_zamowienia + 1 where ID_zamowienia =
- (select ID_zamowienia from INSERTed)
- update zamowienia set Data_dos = dateadd(day,7,data_zam) where ID_zamowienia =
- (select ID_zamowienia from INSERTed)
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement