Calcul\desfasurator dobanda

 Mai jos am creat o procedura ce calculeaza si afiseaza un desfasurator de dobanda bancara.
Procedura are urmatorii parametri:
@SumaLunara – suma lunara pe care ne propunem sa o depunem in fiecare luna in contdepozitplan de acumulare
@NrAni – numarul de ani pentru care dorim sa facem simularea
@ProcentDobanda – procentul de dobanda anuala (de forma 5 daca e 5%, 2.5 daca e 2.5%, etc)
@CapitalizareAnual – se pune 1 daca dobanda se capitalizeaza doar la sfarsitul anului sau se lasa 0 daca dobanda se capitalizeaza lunar
Procedura va afisa urmatoarele coloane:
Anul – anul pt care se face simularea
SoldulInitial – soldul de la inceputul anului
Luna1 – suma depusa + dobanda la sfarsitul primei luni (daca este capitalizare lunara) sau suma depusa (daca este capitalizare anuala). (se pleaca de la premiza ca depunerea de suma se face in prima zi a fiecarei luni)
Luna2  pana la Luna12 – similar cu Luna1
Economie – totalul sumelor depuse pe anul respectiv
Dobanda – dobanda primita in anul respectiv
SoldFinal – soldul la sfarsitul anului respectiv
[mai mult...]

Verificare Check_Policy pt logins

Sunt situatii in care auditorii interni sau externi au nevoie de login-urile de pe serverele de sql ce nu au pusa bifa la CHECK_POLICY. Sau ne dorim noi sa stim care sunt login-urile in aceasta situatie, pentru a nu avea probleme la audit.
CHECK_POLICY este o proprietate prin care credentilalele de sql trebuie sa respecte politica de credentiale din domeniul de windows in care apartine serverul de sql, si este un lucru ce este verificat constant de audit-urile ce vin periodic in firme.
Pentru a gasi aceste login-uri am facut o procedura ce verifica daca login-urile de pe serverul de sql pe care este rulata au bifata proprietatea CHECK POLICY si retuneaza toate login-urile ce nu au aceasta proprietate activata.
Procedura nu are parametri, se creaza si se ruleaza pe serverul de sql dorit si intoarce toti acei logini ce nu sunt conformi cu politica de parole din domeniu.
[mai mult...]

Gasire useri db_owner

M-am lovit des de situatia in care audit-ul mi-a cerut un raport cu userii ce au drept de db_owner pe una sau mai multe baze din serverul de SQL.
Pentru aceasta am facut procedura care  poate sa fie pusa pe orice baza  , si care, la rulare,
verifica fiecare baza de pe server si , pt fiecare baza in parte, intoarce userii care au drept de db_owner pe acea baza (acestia sunt userii care pot face ORICE pe acea baza si la care persoanele care fac audit cer explicatii pt aceste drepturi)
Coloanele pe care le intoarce procedura sunt:
– numele serverului (am pus si numele serverului pt ca, in general, persoana care auditeaza vrea raportul in format excel si aceasta coloana este de folos atunci cand sunt mai multe servere)
– numele bazei pe care userul are drept de db_owner
– numele userului care are drept de db_owner
– tipul userului (de sql sau de windows)
[mai mult...]

Afisare joburi cu erori

In cazul in care avem un server de sql pe care ruleaza foarte multe joburi, ne este necesar un raport rapid cu joburile care, din diverse motive, au dat eroare.

 Pentru aceasta am creat o procedura care poate fi creata pe orice baza a serverului (dar de preferat e o baza de sistem sau una de monitorizare) si, la rulare, afiseaza, in ordine descendenta a datei, toate joburile de sql de pe server care , la rulare, au dat eroare.
Si pt fiecare dintre aceste joburi procedura afiseaza:
– numele jobului
– numele pasului (aferent jobului) in care a fost eroarea (pt ca jobul poate avea mai multi pasi si doar unul sau unii pot da eroare)
– severitatea erorii ( este un cod care pt cei avansati poate fi de ajutor)
– mesajul erorii (ajuta la depanarea ei)
– data rularii jobului
[mai mult...]

Drepturi pe useri

 In cazul in care avem nevoie sa stim, pentru un anumit user, ce tipuri de drepturi are in baza de date si pe ce obiecte,     am facut  o procedura care, rulata pe o baza, intoarce userii, obiectele pe care userii au drepturi, tipul de obiect (tabela, procedura, view, etc)  tipul de drept pe obiectul respectiv (select, update, delete, etc)  si starea tipului de drept (adica daca are GRANT sau DENY pe acel tip de drept pe obiectul respectiv).
Procedura are un parametru @user care, daca primeste o valoare, procedura va returna pentru acel user toate drepturile pe toate obiectele pe care acel user are drept.
Daca parametrul @user va fi lasat strig vid ” (sau daca procedura va fi rulata fara parametru), atunci procedura va returna toti userii cu toate drepturile de pe toate obiectele aferente bazei pe care se ruleaza.
[mai mult...]

Userii ce sunt definiti pe un rol

Avem nevoie uneori de un raport care sa ne arate ce useri apartin unui rol in serverul de sql (in sql-ul rolurile sunt similare grupurilor in windows).
Pentru aceasta am creat o procedura care , rulata pe o baza de date, returneaza pentru acea baza rolurilegrupurile definite pe acea baza de date si userii aferenti fiecarui rolgrup de pe acea baza.
Procedura are un parametru @rol, care este folosit in sensul ca, daca primeste o valoare, procedura va returna toti userii aferenti rolului respectiv, iar daca parametrul @rol va avea valuare string vid ” (sau daca procedura se va rula fara parametru), atunci procedura va returna toate rolurile cu toti userii aferenti fiecarui rol de pe acea baza.
[mai mult...]

Validare IBAN

Pentru cazurile in care avem nevoie de validarea unui IBAN, am creat o procedura ce face acest lucru.

Procedura are doi parametri:

  • primul parametru este un varchar ce reprezinta iban-ul de verificat si validat
  • al doilea parametru este un out de tip int, ce returneaza 1 daca IBAN-ul este valid sau 0 daca IBAN-ul este invalid.
[mai mult...]

Validare CNP

Pentru cazurile in care avem nevoie intr-o aplicatie (sau extern unei aplicatii) de validarea unui CNP, am facut o procedura ce face acest lucru. Procedura primeste ca parametru un varchar @CNP si, in cazul in care este valid , procedura returneaza 1, iar in cazul in care este invalid procedura returneaza 0.

[mai mult...]

Folosirea functiei NTILE() in Sql Server

Una dintre functiile nedreptatite din sql server  (in sensul ca este foarte putin cunoscuta si folosita) este NTILE().

Daca primim o cerinta de la departamentele de business in care ni se cere sa impartim salariatii in 3 echipe in fuctie de topul salariilor (fara sa tinem cont de departamente), am putea sa realizam acest lucru folosind tabele temporare sau un cursor.
O varianta mult mai eleganta si mai simpla este insa functia NTILE().
Aceasta functie primeste si ea doi parametrii:
– primul este un intreg si reprezinta numarul de partitionari dorite (ca sa fie mai clar reprezinta in cate echipe sa imparta numarul de angajati din tabela test_angajati)
– al doilea parametru este o coloana (sau mai multe) din tabela si reprezinta coloana (sau coloanele) de care sa tina cont cand face aceasta partitionare.

 

Pentru a fi foarte clar, in scriptul de mai jos am creat o tabela in care am inserat valori:
drop table test_angajati

create table test_angajati
(
id int identity (1,1),
nume varchar(max),
departament varchar(max),
varsta int,
salariu int
)

 

insert into test_angajati
values (‘Georgescu Mihai’, ‘IT’,24, 2400)

insert into test_angajati
values (‘Popescu Ionel’, ‘Contabilitate’,70, 7000)

insert into test_angajati
values (‘Popescu Mihai’, ‘Distributie’,45, 4500)

insert into test_angajati
values (‘Marinescu Elena’, ‘Contabilitate’,56, 6900)

insert into test_angajati
values (‘Calimanescu Geo’, ‘IT’,24, 2400)

insert into test_angajati
values (‘Eminescu Mihai’, ‘IT’,37, 3800)

insert into test_angajati
values (‘Ionescu Bogdan’, ‘Distributie’,38, 3800)

insert into test_angajati
values (‘Ionescu Emil’, ‘Contabilitate’,70, 7000)

insert into test_angajati
values (‘Ionescu Costin’, ‘Contabilitate’,69, 6900)

insert into test_angajati
values (‘Ionescu Gogu’, ‘Contabilitate’,20, 4300)

 

select * from test_angajati

id nume departament varsta salariu
1 Georgescu Mihai IT 24 2400
2 Popescu Ionel Contabilitate 70 7000
3 Popescu Mihai Distributie 45 4500
4 Marinescu Elena Contabilitate 56 6900
5 Calimanescu Georgeta IT 24 2400
6 Eminescu Mihai IT 37 3800
7 Ionescu Bogdan Distributie 38 3800
8 Ionescu Emil Contabilitate 70 7000
9 Ionescu Costin Contabilitate 69 6900
10 Ionescu Gogu Contabilitate 20 4300

[mai mult...]

Folosirea functiei RANK() in SQL Server

Am observat, in timp, ca sunt cateva functii de sql foarte putin cunoscute, dar care, in unele cazuri, ne pot usura foarte mult munca.Din acest motiv am sa prezint si sa explic cateva dintre ele.
Una dintre cele mai putin cunoscute functii este RANK(). Aceasta functie insa ne poate ajuta foarte mult in anumite situatii.

Spre exemplu, daca ni se cere sa scoatem un raport in care sa facem un TOP AL SALARIILOR PE DEPARTAMENTE, daca nu folosim functia RANK() avem o mare problema, pentru ca va trebui sa folosim mai multe tabele temporare, group by, max , identity , etc.
Insa, folosind functia RANK(), problema se rezolva relativ simplu.

Functia RANK() primeste doi parametri:
-primul este coloana dupa care va face splitarea/partitionarea datelor
-al doilea este coloana dupa care va face sortarea datelor

[mai mult...]