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.