piektdiena, 2014. gada 6. jūnijs

Vaicājuma sadalīšana vairākās daļās

Pēdējās nedēļās tā vairāk sanācis nodarboties ar ātrdarbības lietām. Šeit neliels sausais atlikums un daži padomi, kas var noderēt dzīvē.

trešdiena, 2014. gada 4. jūnijs

Parametra deklarēšana cikla iekšienē

Šāds T-SQL vaicājums (orģinālā mainīgie kursora iekšienē):

declare @i int = 0

while @i < 5
begin
declare @a int;
declare @b int;

Set @a = @i;

if @i <= 2 
Set @b = @a;

select @i i, @a a, @b b;

Set @i+=1;
end

Kādas būs vērtības @b parametram tad, kad @i > 2? Es biju iedomājies, ka Null, bet nekā, lai arī parametra deklarēšana notiek cikla iekšienē, tas joprojām būs 2 (Null tikai pirms pirmreizējas vērtības piešķiršanas).

Starp citu, arī šāds vaicājums nestrādās, lai uz pirmo acu uzmetienu liekas visai korekts (nevar deklarēt divās vietās viena bach ietvaros):

declare @x int = -1;
if(@x>0)
begin
Declare @j int = 5
end
else
begin 
Declare @j int = -5
end

Lai nu kā, parametrus rekomendē deklarēt procedūras/vaicājuma sākumā. Šis ir viens no iemesliem kāpēc tā.

ceturtdiena, 2014. gada 29. maijs

Rezerves kopijas

Rezerves kopiju veidošana un atjaunošana no tām ir viena no svarīgākajām, ja ne svarīgākā lieta, ko jāzina SQL Server administratoram. Šis kopsavilkuma raksts par būtiskām, ar rezerves kopiju veidošanu saistītajām, lietām SQL Server.

ceturtdiena, 2014. gada 6. februāris

Datu apskatīšana/saglabāšana no nvarchar(max) kolonas


Iedvesmojoties no vakardienas twīta:


Ja ir varchar/nvarchar/xml utt kolonna, kurā ir daudz dati, tad kolonnas saturu SSMS nevar apskatīt (te gan jāsaka ka jaunākām SSMS versijām sanāk daudz labāk, bet joprojām ne gana labi).

Risinājums ir datus eksportēt uz failu. Savā variantā izmantoju komandvirkni (cmd.exe) un utilītprogrammu bcp (msdn plašāk).

Komandrinda, ko vajadzības gadījumā pielāgoju:
bcp "select cast(LAUKS as nvarchar(max)) from ManaTabula with (nolock) where RindasID = ID" queryout "c:\Mape\Rez.txt" -S ServeraVards -U LietotajaVards -P Parole -d DatuBaze -w

Ja slēdzos datu bāzei klāt ar Windows autentifikāciju, tad šādi:
bcp "select cast(LAUKS as nvarchar(max)) from ManaTabula with (nolock) where RindasID = ID" queryout "c:\Mape\Rez.txt" -S ServeraVards -d DatuBaze -T -w
  Šis strādā ātri un nav problēmu, ja lauka garums ir pārdesmit megabaiti.

otrdiena, 2013. gada 3. decembris

Down-time

Šodien (2013-12-03) piedzīvots relatīvi īslaicīgs emuāra darbības pārtraukums.
Saistīts ar to, ka veicu vidēji veiksmīgus eksperimentus ar domēna iestatījumiem.

Ja lasi šo ziņu, viss atkal ir kārtībā!
(attēls no šejienes)

ceturtdiena, 2013. gada 28. novembris

Rīks: WinDirStat

Šis rīks vienkāršā un pārskatāmā veidā palīdz saprast, kas datorā "apēd" brīvo vietu. Pamēģināju un palika visnotaļ labs priekšstats.

Lejupielādei: http://windirstat.info/


trešdiena, 2013. gada 30. oktobris

In-Memory database (hekaton)

Vakar (2013-10-29) TechDay cita starpā bija lekcija par  datu bāzēm "SQL Server 2014: in Memory Database – What is It and Why We Need It ". Demonstrētie piemēri un slaidi atrodami- http://sdrv.ms/HennTechDay2013.

In memory datu bāzes ir viens no visinteresantākajiem SQL 2014 jaunumiem. Lai šos piemērus pamēģinātu, protams, vajag SQL 2014 CTP2 (kad iznāks gala versija- šobrīd vēl neviens nezin vai nesaka).

Lai nu kā, mēģinot piemērus, neaizmirstiet "SET NOCOUNT ON". Demonstrācijā miljons rindu ievietošanas lielāko daļu laika patērēja tieši ziņojuma "1 row affected" izvadīšana.
set nocount on; -- bez šīs rindas: 00:02:09, ar šo rindu 00:00:49
declare @start datetime = getdate()
declare @i int = 0
begin tran
while (@i < 1000000)
begin                                                                           
    insert Test1 values (@i, 'Product ' + cast(@i as char(6)), 10)   -- 22
    insert Test2 values (@i, 'Product ' + cast(@i as char(6)), 10)   -- 5
    insert Test3 values (@i, 'Product ' + cast(@i as char(6)), 10)   -- 7
    insert Test4 values (@i, 'Product ' + cast(@i as char(6)), 10)   -- 4
    insert Test5 values (@i, 'Product ' + cast(@i as char(6)), 10)   --
    set @i += 1
end
commit
select DATEDIFF(ms, @start, getdate())