Podstawowe polecenia w SQL Server

Podczas pracy z SQL Server niezbędne wg mnie są następujące polecenia:

1. Wyszukiwanie treści w bazie:

select o.name
from sys.sql_modules c
join sysobjects o on c.object_id = o.id
where [definition] like '%%'

2. Procent przebudowania indeksów w bazie:

;WITH cte AS
(
SELECT
object_id,
index_id,
partition_number,
rows,
ROW_NUMBER() OVER(PARTITION BY object_id, index_id, partition_number ORDER BY partition_id) as rn
FROM sys.partitions
)
SELECT
   object_name(cur.object_id) as TableName,
   cur.index_id,
   cur.partition_number,
   PrecentDone =
      CASE
         WHEN pre.rows = 0 THEN 0
      ELSE
         ((cur.rows * 100.0) / pre.rows)
      END,
   pre.rows - cur.rows as MissingRows
FROM cte as cur
INNER JOIN cte as pre on (cur.object_id = pre.object_id) AND (cur.index_id = pre.index_id) AND (cur.partition_number = pre.partition_number) AND (cur.rn = pre.rn +1)
ORDER BY 4

3. Aktualnie wykonujący się blok kodu w danej sesji:

select QueryText = SUBSTRING(st.text, (re.statement_start_offset/2)+1,         
       ((CASE re.statement_end_offset
          WHEN -1 THEN DATALENGTH(st.text)
         ELSE re.statement_end_offset
         END - re.statement_start_offset)/2) + 1)
from sys.dm_exec_requests re with (nolock)
CROSS APPLY sys.dm_exec_sql_text(re.sql_handle) AS st
where re.session_id = 1234

4. Wypisywanie aktualnie wykonywanej operacji bez oczekiwania na zakończenie się całej procedury:

declare @Date date ='2015-01-16';
declare @DateStr varchar(100);
while(@Date < cast(getdate() as date))
begin
 set @DateStr = cast(@Date as varchar);
 Raiserror(@DateStr,0,1) with nowait
 --tutaj operacje z jakimiś datami
 set @Date = dateadd(day,1,@date);
end

5. Przykład wykorzystania ROW_NUMBER() do wyeliminowania duplikatów danych:

create table #fox_table  (ID bigint)

insert into #fox_table(ID) values (1);
insert into #fox_table(ID) values (1);
insert into #fox_table(ID) values (1);
insert into #fox_table(ID) values (1);
insert into #fox_table(ID) values (5);
insert into #fox_table(ID) values (5);
insert into #fox_table(ID) values (5);

;with duplicates as
(
 select ID, ROW_NUMBER() over (partition by ID order by ID) as RowNum
 from #fox_table with (nolock)
)
delete from duplicates where RowNum > 1;

select * from #fox_table

drop table #fox_table

Windows Service – wprowadzenie

Usługa Windows – proces wykonywany wewnątrz środowiska systemowego Windows, przeznaczony do specjalnych funkcji i niewymagający interakcji z użytkownikiem komputera. Proces taki nazywany jest też serwisem Windows. Usługa zwykle jest uruchamiana podczas startu (ładowania) systemu operacyjnego i działa tak długo, jak długo system jest czynny.

Tyle z wiki. Warto wejść w link i przeczytać pozostałe informacje.

W dzisiejszej części wykonamy banalny serwis windowsowy.

W naszym Visual Studio wybieramy kolejno File -> New -> Project i wybieramy projekt serwisu windowsowego zgodnie z poniższym schematem:

Windows Service Project start

Create Windows Service Project

Otrzymamy projekt z klasą Service1.cs (ja osobiście zmieniam jej nazwę bo mnie ta drażni), który zawiera w sobie m.in. dwie nadpisane metody:

OnStart (logika wykonywana po uruchomieniu serwisu) i OnStop (logika wykonana przy zamykaniu serwisu).
Naszym zadaniem jest wykonanie jakiegoś ciekawego kodu w tych miejscach i nie tylko w tych 🙂
Co możemy zrobić? Wszystko!
Wysyłać powiadomienia na Skype, mail, SMS.
Wykonywać operacje na bazie danych.
Sprawdzać dostępność jakiś usług. itp.itd…

My przykładowo w OnStart umiejścimy logikę odpowiedzialną za wysyłanie maila, oczywiście drogi czytelniku, możesz zmodyfikować kod i np. utworzyć Timer, który co określony interwał będzie odpytywał zadany adres sieci Web o jakieś dane (i dopiero po pobraniu tych danych wysyłać maila). Tutaj nie będziemy implementować jakiegoś wyszukanego problemu.

Dodajmy poniższy kod do OnStart:

MailMessage message = new MailMessage();
message.From = new MailAddress("Jakiś adres email", "Wyświetlana nazwa");
message.To.Add(new MailAddress("mail, na który zostanie wysłana wiadomość"));
message.Subject = "Tytuł wiadomości";
message.Body = "Treść wiadomości";

SmtpClient smtp = new SmtpClient("adres smtp naszej poczty");
smtp.UseDefaultCredentials = false;
smtp.Credentials = new NetworkCredential("email", "hasło");
smtp.EnableSsl = true;
smtp.Port = 587; //Taki jest dla WP
smtp.Send(message);

Tyle wystarczy by wystartować serwis, więc dajemy! Zmieniamy z Debug na Release i wciskamy F5 i co?
I gówno… 🙂
Otrzymamy komunikat:

--------------------------- Błąd uruchomienia usługi systemu Windows --------------------------- Nie można uruchomić usługi z wiersza polecenia lub z debugera. Usługa systemu Windows musi być najpierw zainstalowana (przy użyciu pliku installutil.exe), a następnie uruchomiona za pomocą Eksploratora serwera, Narzędzi administracyjnych usług systemu Windows lub polecenia NET START. --------------------------- OK    ---------------------------

Błąd uruchomienia usługi systemu windows

Otóż tak jest, iż nie uruchomimy ani nie zdebugujemy (w domyślnej konfiguracji) naszego serwisu. Debugowanie serwisu pokażę w następnym wpisie.

Teraz przejdźmy do rejestracji serwisu.

Na maszynie, na której chcemy zarejestrować nasz serwis otwieramy Wiersz polecenia (cmd) jako administrator i wpisujemy:

sc create MyFirstService binPath= "ścieżka do zbudowanego przez nas serwisu" DisplayName= "Mój pierwszy serwis" start= auto

To wszystko, mamy już gotowy serwis, który będzie uruchamiał się automatycznie. Inne możliwości konfiguracji pod linkiem.
W kolejnej części pokaże jak można debugować usługę sieciową.

 

Poniżej jeszcze najprzydatniejsze polecenia (uruchamianie z CMD jako admin):
sc queryex NazwaUsługi – zwraca informacje o usłudze w tym jej numer PID
taskkill /f /pid NR_PID – ubija serwis, którego nie można zatrzymać – bardzo przydatne polecenie.

„Nie rozmawiajmy o polityce”

ciii_470

Do napisania tego wpisu zmusiło mnie wiele czynników, nie jestem pewien czy będę w stanie wymienić wszystkie ale postaram się w miarę mojego prostego informatycznego umysłu przekazać ciążące mi na sercu informacje wraz z możliwie najlepszą argumentacją.
1. Nie zgadzam się z istniejącą tendencją, iż nie należy rozmawiać na tematy polityczne.
2. Rozumiem osoby ucinające rozmowę (na tematy polityczne), jak również osoby wręcz darzących dużą agresją ludzi innego poglądu na politykę.
3. Jestem przerażony łatwością manipulacji medialnej w RP.
4. Przeraża mnie również podział pomiędzy ludźmi, spadek zaufania, skłócenie się rodzin.
5. Domniemywanie obywateli, iż obecność w wyborach jest „patriotycznym obowiązkiem”.

Mógłbym dodać więcej elementów do powyższej listy, jednakże uważam, że zaznaczyłem główne fakty, które są dla mnie istotne i o których rzadko rozmawia się na forum publicznym. Chcę teraz rozwinąć te punkty, wykazać z czym nie potrafię się pogodzić.

Ad 1.
Nie zgadzam się z istniejącą tendencją, iż nie należy rozmawiać na tematy polityczne.
Uważam, iż brak rozmowy na takowe tematy prowadzi do niemożliwości sterowania swoim losem, człowiek który nie potrafi wypowiedzieć się w sferze publicznej jest ograniczony przez media, które kreują w nim, często błędne, odczucia w stosunku do sfery politycznej/gospodarczej państwa.

Ad 2.
Rozumiem osoby ucinające rozmowę (na tematy polityczne), jak również osoby wręcz darzących dużą agresją ludzi innego poglądu na politykę.
Nie wiem jak jest to w Twoim przypadku, drogi Internauto, ale u mnie w rodzinie często dochodzi do spięć gdy rozmawia się o polityce. Przeważnie spięcia są typu: wykreowany świat przez media vs świat rzeczywistyStrasznie denerwuje mnie to, gdy ktoś poogląda TV i uważa się za wielkiego znawcę polityki, rynku, gospodarki i sytuacji Polski.
Wspomniałem o agresji, więc rozwinę swoją myśl. Wielu z Was nie zdaje sobie sprawy z tego, że jest sukcesywnie okłamywana w sposób taki, iż nie potrafi pojmować prawdziwie rzeczywistości (przykładowo – artykuły na gazeta.pl w większości wymuszają postrzeganie wydarzeń politycznych na korzyść niszczącej kraj partii – takie jest moje odczucie). Także gdy człowiek codziennie styka się „lawiną kłamstwa” w końcu przyjmuje je jako prawdę i broni zgubnych wartości, gdy słyszy sprzeczną z „jego” poglądem „nieprawdę”.

Ad 3.
Jestem przerażony łatwością manipulacji medialnej w RP.
Gdy ktoś chce powiedzieć prawdę może liczyć jedynie na pamięć w internecie:

W rodzimych mediach fakty przedstawiane są po łepkach – też to moje odczucie.
Każdemu radzę porównać wiadomości przedstawiane na TVP 1, TVN, TV TRWAM, NIEZALEŻNA.TV i samemu zdecydować, które media dążą do prawdy oczywiście mam na myśli zdarzenia kluczowe – np. Smoleńsk, dług publiczny, prywatyzacja, OFE, NFZ, ZUS, itp. itd…

Ad 4.
Przeraża mnie również podział pomiędzy ludźmi, spadek zaufania, skłócenie się rodzin. Uważam, że nie potrzeba w tym miejscu mojego komentarza…

Ad 5.
Domniemywanie obywateli, iż obecność w wyborach jest „patriotycznym obowiązkiem”.
Być może wpis powinien brzmieć „wmawianie obywatelom, że ich głos jest bardzo ważny”.

A ja chciałbym zapytać się ile jest warty głos człowieka, który „głosuje na PO tylko po to by PiS nie dopchał się do władzy”?
Ile warty jest głos gówniarza, który głosuje na partie, która wydaje mu się fajna, bo wyśmiewa inne partie w programach telewizyjnych? Ile to jest warte? Chcesz dać przysługę państwu? Jeżeli nie wiesz, która partia może pomóc żyć godnie Tobie i Twoim dzieciom, po prostu NIE GŁOSUJ!
Dziwię się, że zagrożenia jakie niosą współczesne czasy i partie, dostrzega klasa, która jest uważana za „najniższą”, a nie potrafią dostrzec tego „ludzie wykształceni”.

Hello World!

Te dwa słowa są chyba pierwszymi słowami każdego, kto kiedykolwiek zaczynał zabawę z programowaniem i nie ważne czy było to C#’powe

MessageBox.Show("Hello World!");

czy też inny język programowania, chyba każdy przebrnął przez te dwa słowa.