T-SQL

CONCAT_WS() - Nová funkce pro spojení řetězců s výběrem separátoru

Od SQL Serveru 2012 máme možnost spojovat řetězce pomocí funkce CONCAT(), která však neumí nic jiného, než prosté spojení řetězců za sebe a není možné specifikovat separátor, kterým bychom od sebe jednotlivé řetězce mohli oddělit. SQL Server 2017 proto přichází s novou funkcí CONCAT_WS(), kde již přídavek WS napovídá, že…

Read more
T-SQL

UNPIVOT()

PIVOT() a UNPIVOT() jsou velmi užitečné funkce jazyka T-SQL. My si dnes ukážeme použití UNPIVOT() funkce na příkladu s objednávkami a jejich cenou a daňovou sazbou. K tomu přidáme i ukázku toho, jak využít možnosti řetězení UNPIVOT() funkcí v jedno dotazu a jak šikovným trikem dosáhnout požadovaného výstupu. A jako…
T-SQL

TRY & CATCH pattern

TRY & CATCH should be used where reasonable to prevent unhandled exceptions in T-SQL code and routines. It’s prepared for copy/paste purposes for everyday use. We may have two basic types of pattern: The new one using THROW keyword The legacy one with RAISERROR() THROW version: BEGIN TRY BEGIN TRAN…
T-SQL

CREATE TABLE syntax surprise

What do you think: Is this valid CREATE TABLE statement? CREATE TABLE dbo.SampleTable (ID INT,) GO Definitely yes! Try it by your own. The only one reason how to explain I see that after comma there can be 0 or n members (empty) collection of constraints like in this sample:…

Read more
T-SQL

Hrátky s Table Value Constructorem

Table Value Constructor (TVC) je v SQL Serveru sice již od verze 2008, ale vzhledem k tomu, jak moc si s ním můžeme vyhrát, nebude na škodu si projít pár zajímavých příkladů jeho použití. Jen pro zopakování si připomeňme, že TVC je set jednoho nebo více řádkových výrazů, pomocí kterých…
T-SQL

Jak chytře na zápis volání sp_executesql?

sp_executesql známe a používáme všichni pro vykonání dynamicky generovaného T-SQL kódu. Viděl jsem již nejrůznější zápisy a jmenné konvence, které se zdály na první pohled nekomplikované a vyhovující, ale s narůstající složitostí kódu se více a více od ideálu vzdalovaly. V průběhu let praxe jsem si oblíbil zápis níže, který…
T-SQL

Používání CASE ve WHERE

Pokud vynecháme případné záludnosti, které nám může přinést použití příkazu CASE ve WHERE podmínce, je to někdy nadmíru šikovná pomůcka, která najde své využití především v různých uložených procedurách používaných jako datové zdroje pro Reporting Services reporty, případně jako chytrá pomůcka aplikaci pro získání filtrovaných datových setů pro gridy a…

Read more
T-SQL

Vzorová syntaxe CURSORu

Dvě základní šablony kurzoru. Liší se především syntakticky, kdy druhá varianta nevyžaduje opakované kopírování seznamu parametrů v příkazu FETCH, což je výhodné zejména tehdy, načítá-li kurzor velké množství sloupců z deklarativního dotazu.
T-SQL

Paralelní INSERT… SELECT

SQL Server 2016 přináší nově paralelní vykonání INSERT…SELECT kombinace, které za určitých okolností představuje výrazné (10x a více) zlepšení výkonu pro některé typické ETL scénáře. Aby mohl být použit paralelní operátor, musí být splněny především dvě podmínky: level kompatibily databáze musí být nastaven na 130 a je nutné použít TABLOCK…
T-SQL

Column Aliases are Fully Ignored in INSERT Columns List

Time to time crazy things are happening in SQL Server. T-SQL looks like to be easy and rigid language without any options for playing with it like other languages. I will show you that there is still some space where you can do magic and have some fun. Check out…

Read more