Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* //sterowanie zdalne
- CREATE PROCEDURE suma_1
- @a INTEGER,
- @b INTEGER,
- @wiek INTEGER OUTPUT
- AS
- BEGIN
- SET @wiek = @a+@b
- END
- */
- -- Anonimowa / niejawna konwersja typów i ich wywołanie
- /*
- DECLARE @wynik INTEGER
- EXEC suma_1 1, 5, @wynik OUTPUT
- PRINT 'Suma to: ' +
- CONVERT(VARCHAR, @wynik) -- poza ciałem procedury || CAST w ciele procedury (dla dat wyłącznie CAST)
- --procedura srednia z 3 cyfr
- -- ograniczenie bledu wprowadzanych danych
- ALTER PROCEDURE suma_2
- @a INTEGER,
- @b INTEGER,
- @c INTEGER,
- @suma FLOAT OUTPUT
- AS
- BEGIN
- IF @a is null or @b is null or @c is null
- PRINT ' Podaj poprawne wartosci'
- ELSE
- SET @suma = (@a + @b +@c)/3
- print 'Srednia: ' +convert(VARCHAR, @suma)
- SET @suma = @a+@b+@c
- END
- DECLARE @suma FLOAT
- EXEC suma_2 1, 5, 7, @suma OUTPUT
- PRINT 'Suma: ' + CONVERT(VARCHAR, @suma)
- --jaki dzien tygodnia
- --stanowi data wprowadzona
- --w przypadku braku wprowadzenia ustaw dzisiejszy dzien
- SELECT DATENAME(month, GETDATE());
- SELECT DATENAME(day, GETDATE());
- SELECT DATENAME(dw, GETDATE());
- SELECT DATEPART(dw, GETDATE()); -- zaczyna od niedzieli
- ALTER PROCEDURE data_1
- @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 'Poniedzialek'
- WHEN 3 then 'Wtorek'
- WHEN 4 then 'Sroda'
- WHEN 5 then 'Czwartek'
- WHEN 6 then 'Piatek'
- WHEN 7 then 'Sobota'
- END
- END
- exec data_1
- exec data_1 '10/10/2017'
- -- zwroc adres w postaci
- --Piotrkowska
- --123/23
- --m.30
- --90-123
- --Łódź
- exec adres_1 'Piotrkowska 123/23 m.30 90-123 Łódź '
- CREATE PROCEDURE adres_1
- @adres_caly VARCHAR(100) as
- BEGIN
- DECLARE @dl_ul INTEGER
- DECLARE @pozycja INTEGER
- 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
- create FUNCTION zeroo() RETURNS INT
- AS
- BEGIN
- RETURN 0
- END
- select dbo.zeroo(), imie from pracownicy -- music byc dbo. na poczatku
- create FUNCTION f_param(@a INT, @b INT) RETURNS INT
- AS
- BEGIN
- RETURN @a +@b
- END
- select dbo.f_param(10, 20)
- select dbo.f_param(5, 3) from pracownicy
- ALTER FUNCTION potega(@liczba float)
- RETURNS FLOAT
- AS
- BEGIN
- DECLARE @wyn FLOAT
- SET @wyn = POWER(@liczba,2)
- RETURN @wyn
- END
- DECLARE @a float, @wynik float
- set @a = 135
- set @wynik = dbo.potega(@a)
- print cast(@a as varchar) + ' do kwadratu to '
- + cast (@wynik as varchar)
- select (avg(wiek)) from Pracownicy; -- potega w funkcji agregujacej
- select dbo.potega(avg(wiek)) from Pracownicy;
- -- funkcja bez BEGIN i END
- CREATE FUNCTION fun_2(@filter varchar(3))
- RETURNS TABLE
- AS
- RETURN (SELECT imie, nazwisko from pracownicy
- where nazwisko like @filter)
- SELECT * FROM dbo.fun_2('n%');
- -- to samo z BEGIN i END
- CREATE FUNCTION fun_z_begin(@filter varchar(3))
- RETURNS
- @tab_return table(imie varchar(50), nazwisko varchar(50))
- AS
- BEGIN
- INSERT INTO @tab_return
- SELECT imie, nazwisko from pracownicy
- where nazwisko like @filter
- RETURN
- END
- SELECT * FROM dbo.fun_z_begin('n%');
- -- funkcja wiek - alternatywa dla case
- CREATE FUNCTION wiek_(@Wiek INT)
- RETURNS VARCHAR(MAX)
- AS
- BEGIN
- DECLARE @Wynik VARCHAR(MAX)
- IF @Wiek < 25
- BEGIN
- SET @Wynik = 'Młody';
- END
- ELSE IF @Wiek >=26 and @Wiek <=45
- BEGIN
- SET @Wynik = 'Średni'
- END
- ELSE IF @Wiek >= 46
- BEGIN
- SET @Wynik = 'Podeszły'
- END
- ELSE
- BEGIN
- SET @Wynik = 'Nieznany'
- END
- RETURN @Wynik;
- END;
- SELECT imie, nazwisko, wiek, dbo.wiek_(wiek)
- AS 'Jaki wiek ?' FROM pracownicy;
- -- Funkcja pola wybranej figury, kwadrat, prostokat, trojkat, romb albo rownoleglobok, kolo
- CREATE FUNCTION pola_(@figura varchar(20), @bok float, @bok2 float = 0)
- RETURNS FLOAT
- AS
- BEGIN
- DECLARE @Wynik float;
- IF LOWER(@figura) = 'kwadrat'
- BEGIN
- SET @Wynik = dbo.potega(@bok);
- END
- ELSE IF LOWER(@figura) = 'prostokat'
- BEGIN
- SET @Wynik = @bok * @bok2;
- END
- ELSE IF LOWER(@figura) = 'kolo'
- BEGIN
- SET @Wynik = PI()*dbo.potega(@bok);
- END
- ELSE IF LOWER(@figura) = 'trojkat'
- BEGIN
- SET @Wynik = (@bok * @bok2) / 2;
- END
- ELSE IF LOWER(@figura) = 'romb' OR LOWER(@figura) = 'rownoleglobok'
- BEGIN
- SET @Wynik = @bok * @bok2;
- END
- RETURN @Wynik;
- END;
- -- split
- CREATE FUNCTION Split(@string VARCHAR(MAX),@delimiter VARCHAR(5))
- RETURNS @wynik TABLE(tekst VARCHAR(MAX))
- AS
- BEGIN
- DECLARE @poczatek INTEGER
- DECLARE @koniec INTEGER
- 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',',');
- */
- /*
- Stworz funkcje ktora bedzie przyjmowac 2
- argumenty bedace ciagami znakow
- maksymalnie do 100 znakow i zwroci
- ciag znakow powstaly z wymieszania na
- przemian znakow
- z ciagu pierwszego z ciagiem drugim
- Dodatkowo funkcja to ma zamienic kolejnosc znakow
- PRZYKLAD: funkcja('ABCDE','12345') zwroci: 5E4D3C2B1A
- W przypadku niezgodosci dlugosci ciagow
- wejsciowych wyswietl komunikat typu
- 'Blad dlugoci znakow: X <> Y
- gdzie X i Y to dlugosci ciagow wejsciowych
- ALTEr FUNCTION func_awesome(@string_1 VARCHAR(100),@string_2 VARCHAR(100))
- RETURNS VARCHAR(200)
- AS
- BEGIN
- IF LEN(@string_1) != LEN(@string_2)
- RETURN 'Blad dlugosci znakow: ' + CAST(LEN(@string_1) as VARCHAR) + ' <> ' + CAST(LEN(@string_2) AS VARCHAR)
- DECLARE @licznik INT;
- DECLARE @result VARCHAR(200);
- SET @licznik = 0;
- SET @result = '';
- WHILE(@licznik) <= LEN(@string_1)
- BEGIN
- SET @licznik = @licznik + 1;
- set @result = @result + SUBSTRING(@string_1, @licznik-1,1)
- SET @result = @result + SUBSTRING(@string_2, @licznik-1,1)
- END
- RETURN REVERSE(@result);
- END;
- SELECT dbo.func_awesome('1240', 'qweg');
- Dodaj funkcje fun_kol, ktora zwroci tekstowa nazwe
- dnia tygodnia powstala z daty powstalej 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
- Przykladowy wynik wyowolania funkcji:
- 'Otrzymalismy dzien: Sunday'
- parameters, data, ilosc dni
- DATEADD() - zwroci date, 3 argumenty (datepart(year,quarter,monty,doty,week,weekday), nr, data)
- DATENAME() - dzisiejsza data
- DATE
- CREATE FUNCTION fun_kol(@date datetime, @interwal int)
- RETURNS VARCHAR(50)
- AS
- BEGIN
- DECLARE @wynik as datetime
- IF @interwal is null
- BEGIN
- ....
- --TRIGGER
- CREATE TRIGGER nazwa
- ON nazwa TABELA
- FOR AFTER | INSTEAD OF | INSERT | UPDATE | DELETE | CREATE
- AS BEGIN
- END
- ALTER TRIGGER tr_dzialy on dzialy
- FOR INSERT, UPDATE, DELETE
- AS
- BEGIN
- SELECT * FROM INSERTED
- SELECT * FROM DELETED
- END;
- INSERT INTO dzialy(nazwa) VALUES('Nowy')
- UPDATE dzialy SET aktualny2 = 'nie'
- where nazwa = 'Nowy'
- DELETE FROM dzialy where nazwa = 'Nowy'
- SELECT * from dzialy
- ALTER TRIGGER tr_dzialy on dzialy
- FOR INSERT, UPDATE, DELETE
- AS
- BEGIN
- if update(aktualny)
- print'Zmiana aktualnosci'
- else
- print'Zmiana nie zaszla'
- print columns_updated() -- pokaze zmiane wartosci
- END;
- UPDATE dzialy set nazwa = 'nowa nazwa', aktualny = 'tak' where dzialID = 3
- UPDATE dzialy set aktualny2 = 'nie' where dzialID > 5
- select * from dzialy
- select * from zarobki
- ALTER TRIGGER tr_zarobki on zarobki
- INSTEAD OF DELETE
- AS
- BEGIN
- update zarobki set aktualny='nie' where zarID in
- (select zarID from deleted)
- END;
- delete from zarobki where pracID = 1
- -- triggery audytowe
- -- pola audytowe, info o zmianie danych
- alter table pracownicy add
- data_wst datetime,
- operator_wst varchar(30),
- data_mod datetime,
- operator_mod varchar(30);
- select * from pracownicy
- create trigger tr_prac on pracownicy
- for update, insert
- as
- begin
- if exists(select * from deleted)
- update pracownicy set data_mod = GETDATE(),
- operator_mod = user
- where pracID in (select pracID from inserted)
- else
- update pracownicy set data_wst = GETDATE(),
- operator_wst = user
- where pracID in (select pracid from inserted)
- end;
- insert into pracownicy (nazwisko) values ('Naz_Testowe')
- select * from pracownicy where nazwisko = 'Naz_Testowe'
- update pracownicy set imie = 'imie_test' where nazwisko = 'Naz_Testowe'
- select * from pracownicy where nazwisko = 'Naz_Testowe'
- tabela o nazwie : zarobki_audyt
- - id glowny ( auto increment)
- - id zarobku (z tabeli zarobki - brak relacji)
- - data (zarobki)
- - brutto (zarobki)
- - id_pracownicy (zarobki - brak relacji)
- - operacje
- - data operacji
- Ustawic na kolumnie - operacja - ograniczenie, ktore przyjmuje tylko nazwy INSERT, UPDATE, DELETE
- Na tabeli - zarobki - utworzyc trigger o nazwie: audyt - ktory wywolywany jest po operacjach wstawienia, aktualizacji i usuwania
- Wyzwalacz ten ma wstawiac odpowiedni rekord do tabeli - zarobki_audyt - w zaleznosciod wykonywanej operacji.
- 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) = 'DELETE' or UPPER(operacja) = 'UPDATE');
- select * from zarobki_audyt
- CREATE TRIGGER 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, 'DELETE', 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;
- select * from zarobki_audyt
- INSERT INTO zarobki(data,brutto,ID_pracownicy) VALUES('11/11/11',1000,3)
- */
- -- trigger przenoszacy dane dot. zarobkow do tabeli historycznej bedacej dokladna kopia tabeli
- -- zarobki bez kolumny aktualny, uwzglednij w tej tabeli date przenosin oraz uzytkownika ktory kasowal dane
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement