• 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

Po havárii serveru a obnově systému ze zálohy zůstali databáze ve stavu Recovery Pending a nebylo možné je spravovat. Zjistil jsem, že problémem byl rozbouraný soubor s SQL logama. 

 

 

Uživatel, pod kterým spouštíte níže uvedené dotazy musí být členem SYSADMIN

 Nejprve je nutné povolit proceduru na serveru.  To bývá kvůli bezpečnosti defaultně vypnuté

-- povoleni procedury CDMSHELL

EXEC sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
EXEC sp_configure 'xp_cmdshell', 1
GO
RECONFIGURE
GO

 

Příkazem SUBSTRING lze vykopírovat část řetězce. První parametr příkazu udává první kopírovaný znak, druhý parametr počet znaků.

 

DECLARE @text nvarchar(15) = 'Ahoj Čau Nazdar'

SELECT SUBSTRING(@text,6,3) AS Výsledek

 

Výsledek:

 

Občas se stane, že v selectovaných datech jsou skryty znaky pro formátování textu (odřádkování, tabulátory,..) To může být nevhodné pokud tato data exportujete do textového souboru, tisknete apod.

Jedná se hlavně o tyto znaky:

CHAR(9) - tabulátor
CHAR(10) - konec řádku (LF)
CHAR(13) - návrat vozíku (CR)

Lze to vyřešit tím, že znaky vymažeme pomocí funkci REPLACE (defacto je nahradíme za prázdnou hodnotu).

 

DECLARE @Text nvarchar(max)
SET @Text = 'Ahoj ' + CHAR(10) + CHAR(13) + 'Druhy radek'

SELECT REPLACE (REPLACE(@Text,CHAR(10),''),CHAR(13),'')

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)

 

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