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)
- Napsal Tonda Koutský
- Kategorie: SQL
Tento postup popisuje kroky nutné k nastavení mailové komunikace na SQL serveru.
Nastavení lze provést v MS SQL Managment Studiu.
Prvním krokem je spuštění konfiguračního průvodce v menu Managment -> Database Mail
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
- Napsal Administrator
- Kategorie: SQL
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.
- Napsal Tonda Koutský
- Kategorie: SQL
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)
- Napsal Tonda Koutský
- Kategorie: SQL
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í řádek)
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_vypocet INTO @IDPolozky, @ProdejniCena
END
-- uzavření kurzoru
CLOSE cur_vypocet
-- uvolnění z paměti
DEALLOCATE cur_vypocet
- Napsal Tonda Koutský
- Kategorie: SQL
Dědek na cestách Počet článků: 3
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.
SQL Počet článků: 39
Zde je můj blog o SQL. Je to takový můj tahák.
IT Počet článků: 13
Moje poznámky z instalací
Strana 7 z 11