2012-11-17
W zapytaniach SQL musisz czasami sięgnąć do wartości z poprzedniego lub następnego rekordu. W SQL 2012 służą do tego funkcje LAG (poprzedni rekord) oraz LEAD (następny rekord). Popatrz na przykład:
USE tempdb;
GO
CREATE TABLE testlag
(Year INT,
Month INT,
Value INT)
GO
INSERT testlag VALUES
(2012,1,1000),
(2012,2,2000),
(2012,3,3000),
(2012,4,4000),
(2013,1,5000),
(2013,2,6000),
(2013,4,7000);
Mamy tabelkę prezentującą wartości dla kolejnych lat i miesięcy. Jeżeli w ramach wyświetlonego rekordu chcesz zobaczyć nie tylko bieżącą wartość z bieżącego rekordu, ale i z poprzedniego napisz:
SELECT Year, Month, Value,
LAG(Value,1,0) OVER (PARTITION BY Year ORDER BY Year,Month) As 'Previous month’
FROM testlag
Czytaj dalej »
2012-11-17
Poniższy przykład pochodzi z http://msdn.microsoft.com/en-us/library/ms189797.aspx. Prezentuje on, jak można dobrze wykonywać transakcje i reagować na potencjalnie pojawiające się błędy.
1. Po pierwsze używaj opcji SET XACT_ABORT ON. Powoduje ona „awansowanie błędów” powodujących przerwanie pojedynczego STATEMENT na błędy powodujące przerwanie batcha, lub przejście do bloku CATCH w przypadku obsługi błędów poprzez TRY/CATCH
2 Używaj TRY/CATCH do wychwycenia błędów. Jeżeli twoja transakcja składa się z wielu instrukcji, to transakcja sama w sobie nie wycofa wszystkiego po napotkaniu pierwszego lepszego błędu (chyba że użyłeś XACT_ABORT). To do Ciebie należy obsługa tego błędu
3. Używaj wartości funkcji XACT_STATE() do oceny tego co można zrobić dalej:
- 1 masz otwartą transakcję i nadaje się ona do commitowania
- 0 nie ma otwartej transakcji. Zarówno commit jak i rollback spowodowały by błędy
- -1 masz otwartą transakcję, ale nie da się jej skommitować. Np. próbowałeś wstawić duplikujący się rekord na kolumnie z CONSTRAINT UNIQUE. Zrób co chcesz, a potem wywołaj rollback do tej transakcji.
Wszystko ładnie widać na poniższym przykładzie: Czytaj dalej »
2012-11-17
Dopiero dzisiaj zauważyłem, że w SQL mamy coś takiego! Jest to metoda pozwalająca na dokonywanie zapisu do koluny nvarchar(max) w taki sposób, aby zmienić część tekstu na inny. Poniżej prezentuję przykład wzięty z http://decipherinfosys.wordpress.com/2007/07/24/update-textntext-or-varcharmax-data-type-columns-in-sql-server/
Popatrz na ten przykład:
Tworzysz tabelkę:
CREATE TABLE Test
(ID INT IDENTITY,
TXT NVARCHAR(MAX))
Wstaw do niej rekord:
INSERT Test VALUES(’It is new’)
i obejrzyj go:
SELECT TXT FROM Test
A teraz zaktualizuj go z wykorzystaniem mutatora WRITE
UPDATE Test SET TXT.WRITE(’was’,3,2)
Zobacz zmiany:
SELECT TXT FROM Test
Czytaj dalej »
2012-11-15
Alias do serwera SQL musi być konfigurowany na systemie klienckim. Mało wygodne będzie jednak odiwedzanie komputeró po kolei i wyklikiwanie w nim definicji aliasu.
Alias wystarczy zdefiniować na jednym komputerze, a następnie wyeksportować z rejestru i importować na pozostałych komputerach.
Odpowiednia gałąź rejestru z aliasami serwera SQL to:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\ConnectTo
Źródło:
http://blogs.msdn.com/b/sql_protocols/archive/2007/01/07/connection-alias.aspx
2012-10-18
Rozwiązując pewien problem potrzebowałem uzyskać w skrypcie php adres zdalnego klienta. Właściwy sposób to
<?php echo $_SERVER[’REMOTE_ADDR’]; ?>
Przy okazji natknąłem się na bardzo przydatny kawałek kodu:
<center><b>Server variables</b></center>
< hr>
GATEWAY_INTERFACE = <?php echo $_SERVER[’GATEWAY_INTERFACE’]; ?> <br>
SERVER_ADDR = <?php echo $_SERVER[’SERVER_ADDR’]; ?> <br>
SERVER_NAME = <?php echo $_SERVER[’SERVER_NAME’]; ?> <br> Czytaj dalej »
2012-10-15
Apache 2 wykonuje reverse DNS lookup. Potrzebuje do tego komendy host, która prawdopodobnie nie znajduje się w systemie. Sprawdź czy ta komenda występuje w Twoim systemie wydając polecenie host. Jeśli nie to zainstaluj pakiet zawierający tę komendę:
yum install bind-utils
2012-10-15
Objaw: po uzyskaniu połączenia poprzez VPN stacja robocza straciła kontakt z Internetem.
Przyczyna: Domyślnie po uzyskaniu połączenia VPN stacja robocza otrzymuje nowy adres Gateway, który staje się domyślnym gateway dla tego komputera. Jeżeli gateway był niepoprawnie skonfigurowany, to rzeczywiście jest możliwa utrata połączenia z Internetem, mimo działającego nadal połączenia z VPN
Naprawa: Poprawić ustawienia bramki uzyskiwane przez stacje roboczą po połączeniu VPN lub (i to było w moim przypadku lepsze) spowodowanie, aby stacja robocza nie korzystała z gatewaya zdalengo (bo wtedy cały ruch internetowy będzie przekazaywany przez łącze VPN) tylko poprzez gateway lokalny. Poniżej instrukcja krok po kroku:
1. W Centrum sieci i udostępniania przejdź do „Zmień ustawienia karty sieciowej”
2. Wybierz właściwości połączenia VPN Czytaj dalej »