Radek Špinka Přepínače MSSQL výběr
GO značí konec dávky T-SQL příkazů nástrojům SQL serveru, které zajistí její vykonání není to příkaz T-SQL, je to příkaz sqlcmd,nebo oqsl , SQL Server MSC editoru nesmí být na stejné řádce jako T-SQL příkaz
Case sensitivita v DB se dá zjistit, dle Serverové proměnné Collation – vyjadřuje řazení znaků, jazykové nastavení nastavuje se při vytváření nové databáze Vyčtení : SELECT SERVERPROPERTY ('Collation') GO Eg : Czech_CI_AS – kde : CI = case insensitive, CS = case sensitive AI = accent insensitive, AS = accent sensitive
Uvozovky Pokud je přepínač QUOTED_IDENTIFIER(viz dále) nastaven na OFF lze uzavřít konstanty do obou typů uvozovek(tzn. “” nebo ’’), jinak lze použít jen jednoduché uvozovky Apostrof v literálu : ‘O’’Reilly’ odpovídá O’Reilly
SET Umožňuje měnit obsah lokální proměnné, u. def. vlastnosti, u. def. veřejné pole,…. Nastavuje specifické informace pro současnou session – přepínače
Dělení Přepínačů Date and time statements Locking statements Miscellaneous statements Query Execution Statements ISO Settings statements Statistics statements Transactions statements
Date and time statements SET DATEFIRST { number | @number_var } nastaví první den v týdnu od 1 do 7, kde 1 Pondělí a 7 Neděle, Default je 7 pro U.S English
Příklad DATEFIRST SET DATEFIRST 7; SELECT CAST('1999-1-1' AS datetime) AS SelectDate ,DATEPART(dw, '1999-1-1') AS DayOfWeek; -- 1. Leden, 1999 je pátek. Protože U.S. English obecně -- používá Neděli jako první den v týdnu, funkce DATEPART 1999-1-1 -- vrací hodnotu 6, Protože pátek je šestý den v týdnu -- když týden začíná Nedělí a její hodnota je 1. SET DATEFIRST 3; -- Jelikož středa je nyní považována za první den v týdnu -- DATEPART nyní vrací, že 1999-1-1 (Pátek) je třetí den v týdnu. GO
Locking statements SET LOCK_TIMEOUT timeout_period nastaví dobu, po kterou se čeká na uvolnění zámku (ms)
Miscellaneous statements SET QUOTED_IDENTIFIER { ON | OFF } identifikátory mohou být uzavřeny v složených závorkách a literály musí být uzavřeny jednoduchými uvozovkami ON INSERT INTO dbo."Test" VALUES (7, 'Text with a single '' quote') OFF INSERT INTO dbo.Test VALUES (7, "Text with a single ' quote")
ON - Umožnuje vložit explicitní hodnoty do identitních sloupců tabulky SET IDENTITY_INSERT [ database_name . [ schema_name ] . ] table { ON | OFF } ON - Umožnuje vložit explicitní hodnoty do identitních sloupců tabulky Právě jedna tabulka v session může mít tuto vlastnost nastavenou na ON
Příklad IDENTITY_INSERT
Query Execution Statements SET PARSEONLY { ON | OFF } pokud je ON tak se nevykonávají příkazy, jen se provede syntax check
ISO Settings statements SET ANSI_NULLS { ON | OFF } Specifikuje chování operátorů rovnosti(=) a nerovnosti(<>) dle ISO, když jsou používány na hodnotě NULL
SET ANSI_NULLS ON Všechna porovnání proti hodnotě NULL se vyhodnotí jako UNKNOWN Příkaz select, který používá WHERE nazev_sloupce = NULL vrací 0 řádků i když jsou zde null hodnoty ve sloupci nazev_sloupce. Příkaz select, který používá WHERE nazev_sloupce <> NULL vrací 0 řádků i když jsou zde nonnull hodnoty ve sloupci nazev_sloupce.
SET ANSI_NULLS OFF všechna porovnání proti hodnotě NULL se vyhodnotí jako TRUE pokud je hodnota NULL operátory rovnosti a nerovnosti se nedrží standartu ISO Příkaz select, který používá WHERE nazev_sloupce = NULL vrací řádky které mají null hodnoty ve sloupci nazev_sloupce Příkaz select, který používá WHERE nazev_sloupce <> NULL vrací řádky s nonnull hodnotami ve sloupci nazev_sloupce. Takže, příkaz SELECT s klauzulí WHERE nazev_sloupce <> hodnota_XYZ vrací všechny řádky, které nejsou rovny hodnota_XYZ a nejsou NULL
Příklad ANSI_NULLS Mějme tabulku test se dvěma sloupci: ID Int primary key,Nazev nchar(10) NULL. Naplněnou daty: ID Nazev 1 Ahoj 2 NULL
Příklad SET ANSI_NULLS ON Dotaz : select * from test where Nazev = NULL Výsledek: ID Nazev 0 řádků Dotaz : select * from test where Nazev <> NULL Výsledek: ID Nazev 0 řádků
Příklad SET ANSI_NULLS OFF Dotaz : select * from test where Nazev = NULL Výsledek: ID Nazev 2 NULL Dotaz : select * from test where Nazev <> NULL Výsledek: ID Nazev 1 Ahoj
SET ANSI_NULLS { ON | OFF } v budoucí verzi MS SQL Serveru bude tato hodnota vždy ON a pokus o nastavení na OFF vyhodí chybu
Statistics statements SET STATISTICS TIME { ON | OFF } ON – zobrazí počet milisekund potřebných k rozboru, kompilaci, a výkonu každého příkazu v okně Messages
Transactions statements SET TRANSACTION ISOLATION LEVEL { READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SNAPSHOT | SERIALIZABLE } [ ; ] nastaví úroveň izolace transakcí
Čtení nastavení Přepínačů SELECT @@Option_Name GO
Nastavení Query Na dalších dvou slidech je zobrazeno jak nastavit přepínače pro celý dotaz
Konec Použitá literatura : http://msdn.microsoft.com