• aaa

    Poznávačka krás Maďarska - toulání po severu 

  • CAT700

    Non-stop adventure závod přes Katalánsko - z Pyrenejí až k moři

  • Toulání Šumavou
    Toulání Šumavou

    Extrémní non-stop MTB závod

  • 1000 miles
    1000 miles

    Non-stop extrémní adventure závod napříč Československem by Jan Kopka

  • Bohemia Divide 2019

    Non-stop bike packing závod 700km dlouhý z nejjižnějšího do nejsevernějšího místa ČR 

A A A

Tímto skriptem lze exportovat data z určité tabulky do CSV souboru (pokud potřebujete exportovat určitý select, je potřeba vytvořit pomocnou tabulku a tu pak exportovat)

DECLARE 
@SQL nvarchar (MAX),
@CMD nvarchar (500),
@Path nvarchar (200)

-- vytvoření selectu do tabulky TabData
SET @SQL = 'SELECT * FROM ' + DB_NAME()  +'.dbo.TabData'

-- cesta pro uložení + název souboru
SET @Path = (SELECT 'D:\EXPORT\export-file.csv')

-- sestavení celého příkazu
SELECT @CMD =  'bcp " ' + @SQL + ' " queryout ' + @Path  + '  -c -t; -T -S  '

-- export pomocí procedury xp_cmdshell
EXEC master..xp_cmdshell @CMD

 

V následujícím příkladu uvádím možnost jak vytvořit název souboru pomocí datumu a času (např. pro 10.5.2018 v 12 hod 50 min 30 sec to bude 2018-05-10-12-50-30) 

 

DECLARE 
@SQL nvarchar (MAX),
@CMD nvarchar (500),
@Path nvarchar (200)

SET @SQL = 'SELECT * FROM ' + DB_NAME()  +'.dbo.NypTabExportFB'

SET @Path = (SELECT 'D:\EXPORT\' + REPLACE(REPLACE(convert(nvarchar(20),GetDate(),120),':','-') ,' ','-')+'.csv')

SELECT @CMD =  'bcp " ' + @SQL + ' " queryout ' + @Path  + '  -c -t; -T -S  '

EXEC master..xp_cmdshell @CMD

 

Samozřejmostí je nutnost oprávnění pro xp_cmdshell (pozor na bezpečnostní riziko)

 

Tento postup zobrazuje nastavení mailové komunikace na SQL serveru.

 Prvním krokem je spuštění konfiguračního průvodce v managment studiu.

Vybereme první možnost - nastavení db mailu

Pokud nejsou aktivovány služby db mailu v tomto kroku je povolíme.

Pojmenujeme vytvářený mailový profil

Nakonfigurujeme SMTP účet, pomocí kterého budeme odesílat maily přes poštovní server.

Vytvořený profil nastavíme jako výchozí popř.veřejný (je-li žádoucí)

V dalším kroku je možné parametrizovat odesílání popř.nastavit restrikce na typy příloh

Posledním krokem průvodce je shrnutí nastavení.

Potvrzení úspěšného nastavení.

Nyní je možné provést test

 

Pokud chceme používat mailový profil pro zasílání reportů a alertů SQL agentem, je nutné to povolit.

 

Nakonec je ještě třeba nastavit Operátora (kontakt kam budou zprávy zasílány)

 

Nyní už můžeme zasílání alertů nastavit např.na jobech

 

Nejjednodušší způsob jak přenést joby na jiný SQL server je vyskriptování a export jobu v Managment Studiu a následná případná úprava a import (spuštění skriptu) v Mgm studiu na druhém serveru.

Joby je možné uložit jako soubor nebo je otevřít v novém okně MGM studia a pak s nimi dále pracovat.

 

 

 

Občas je zapotřebí do výpočtu použít rozsah prvního a posledního dne v roce. Toto lze získat následujícími skripty.

 

Př.1 - vstupní proměnná je rok ve formátu čísla např. 2016

DECLARE @Rok int
SET @Rok = 2016

-- první den v roce
SELECT  DATEADD(yy, @Rok-1900,0) 

-- poslední den v roce
SELECT  DATEADD(yy, @Rok-1899,0)-1

 

 

 

Př.2 - vstupní proměnná je datum v našem případě aktuální datum

DECLARE @Datum date
-- aktuální datum
SET @Datum = GETDATE()

-- první den aktuálního roku
SELECT DATEADD(yy, DATEDIFF(yy, 0, @Datum),0)

-- poslední den aktuálního roku
SELECT DATEADD(yy, DATEDIFF(yy, 0, @Datum) + 1, -1)

 

Kurzory slouží pro sekvenční zpracování vybraných dat. Do dočasné tabulky se načtou data a nad nimi se provádí daná sekvence příkazů (uzavřených do bloku BEGIN ... END)

Pro lepší představu uvedu příklad použití:
V informačním systému potřebuji spočítat marži nad fakturami. Faktura obsahuje položky, na kterých je uvedena prodejní cena. Abych zjistil marži položky je třeba provést nad položkami několik výpočtů. Řešení: Kurzor načte do dočasné tabulky všechny položky označených faktur a pak je postupně prochází a nad každým provede sekvenci výpočtů . Po provedení výpočtů nad jedním řádkem se se přesune na řádek další.

Kurzor prochází postupně jednotlivé řádky výběru (použitím příkazu FETCH NEXT viz.příklad). Můžeme ale použít i tyto příkazy:
FETCH PRIOR (předchozí řádel)
FETCH LAST (poslední řádek)
FETCH FIRST (první řádek)

-- proměnné
DECLARE @IDPolozky int, @ProdejniCena numeric(19,2)  
 
-- deklarace kurzoru
DECLARE cur_vypocet CURSOR FOR					

-- data nad kterými bude kursor dělat výpočty
SELECT ID, Cena FROM TabPolozkyFaktur WHERE CisloFaktury = 2222
 
-- otevření kursoru
OPEN cur_vypocet
 
-- skok na první řádek a načtení dat do proměnných
FETCH NEXT FROM cur_vypocet INTO @IDPolozky, @ProdejniCena	
 
-- pokud je úspěšné načtení proměnných (status 0) tak proveď příkazy
WHILE @@FETCH_STATUS=0						
 
  BEGIN
    -- příkazy které provádíme
    -- skok na další řádek a načtení dat do proměnných 
    FETCH NEXT FROM cur_1 INTO @IDPolozky, @ProdejniCena
  END   

-- uzavření kurzoru 
CLOSE cur_vypocet 

-- uvolnění z paměti 
DEALLOCATE cur_vypocet

 

Původně to měla být kategorie o cestách, které podniknu na svém starém kole-dědkovi. Pak se mě název zalíbil a říkám si, že jednou budu taky dědek, vlastně syna už na to mám dost velkýho, a tak nadčasově tuto kategorii nechám pojmenovanou takto. Takže zde nalezneš zápisky z cest. 

Zde je můj blog o SQL. Je to takový můj tahák.

Moje poznámky z instalací

Search