SQLShack (Čeština)

SQLShack (Čeština)

Tento článek je o mnoho různých SQL datové typy, které budeme používat při práci s SQL Server. Začneme s rychlým přehledem a projdeme některé věci, jako jsou Kategorie datových typů, s jakými objekty můžeme pracovat a jak vytvořit vlastní datové typy.

přehled datových typů SQL

Chcete-li věci nastartovat, promluvme si o tom, co je datový typ. Kdybych to měl definovat, řekl bych, že datový typ určuje druh, velikost a rozsah dat, která mohou být uložena v objektu., Takže, to nás přivádí na otázku, objekty, které mají datové typy:

  • Sloupce
  • Proměnné
  • Výrazy
  • Parametry

Tyto čtyři SQL datové typy objektů jsou nejvyšší důležitosti. Sloupce jsou samozřejmě pro tabulky. Pokaždé, když vytvoříme proměnnou, musíme jí také přiřadit datový typ. Kromě nich máme výrazy a parametry k uzavření seznamu objektů, které budou obsahovat data, a proto musíme určit, jaký druh dat budou obsahovat.,

Pohybující se na, pojďme se podívat na tři kategorie datových typů:

  • Vestavěné datové typy
  • Uživatelsky definovaný alias datové typy
  • Uživatelsky definovaný společný jazyk runtime (CLR) typy dat

není mnoho říci o první kategorie. To jsou datové typy, na které jsme všichni zvyklí. Níže je graf, který uvádí známý vestavěné datové typy a jejich rozsahy:

  • Poznámka: Text, Ntext a Image SQL typ dat budou odstraněny v budoucí verze serveru SQL Server. Je vhodné vyhnout se používání těchto datových typů v nových vývojových pracích., Místo toho použijte datové typy varchar(max), nvarchar(max) a varbinary(max).

Next, máme to, co jsme zmínili na začátku, a ty jsou definované uživatelem alias datové typy, které nám umožňují vytvářet vlastní datové typy, na základě vestavěného v seznamu výše.

poslední kategorií jsou uživatelem definované datové typy common language runtime (CLR), které nám umožňují vytvářet vlastní datové typy pomocí.NET frameworku., To je trochu složitější, než výše uvedených a vyžaduje znalosti programování na vybudování sestavy, zaregistrovat se, že montážní uvnitř SQL Server, vytvořit nový SQL datový typ na základě toho shromáždění, a pak můžeme začít používat nově vytvořený datový typ v SQL Server.

SQL datové typy úvahy

přejdeme k další části, která je v podstatě jen teorie, ale rozhodně něco, o čem byste měli přemýšlet při ukládání dat trvale nebo dočasně.,

konverze

jako vývojář databáze je jednou z nejčastějších rutin při psaní kódu konverze. Konverze probíhá, když jsou data z objektu přesunuta, porovnána nebo kombinována s daty z jiného objektu. Tyto konverze se mohou stát automaticky, to, co nazýváme implicitní konverzí v SQL Serveru nebo ručně, které je známé jako explicitní konverze, což v podstatě znamená psaní kódu speciálně pro něco udělat. Užitečné pravidlo je, že explicitní konverze je vždy lepší než implicitní konverze, protože to dělá kód čitelnější., Nyní, když mluvíme o konverzích, stojí za zmínku také věci, které nám mohou pomoci s explicitní konverzí, jako jsou funkce CAST a CONVERT používané k převodu výrazu jednoho datového typu SQL na jiný.

GUID

GUID je zkratka pro globálně jedinečný identifikátor. Je to způsob, jak zaručit jedinečnost a je to jeden z největších datových typů SQL. Jedinou nevýhodou GUID je velikost 16 bajtů. Proto se vyvarujte indexů na Guidách co nejvíce.

NULL vs., Ne NULL

Pokud se držíte výchozích hodnot SQL Serveru, mohlo by to vést k některým problémům s integritou dat. Vždy byste se měli pokusit zadat vlastnost nullability, kdykoli definujete sloupce v tabulkách. Zpět k základům, null znamená neznámé nebo chybějící, což v podstatě znamená, že to není 0 nebo prázdný řetězec, a nemůžeme provést nulové srovnání. Nemůžeme říct null = null. Tohle se nedá dělat. Existuje vlastnost zvaná ANSI_NULLS, kterou můžeme nastavit a ovládat toto srovnání s nulovými hodnotami.,

Sparse sloupce

Tento typ sloupec je jen obyčejný sloupec v SQL Server, s výjimkou majetku, který je nastaven na on a vypráví SQL Server optimalizovat že sloupec null skladování.

pokyny pro datový typ SQL

nejprve vždy použijte správný datový typ úlohy. To je mnohem větší, než si většina lidí myslí. To může mít významný dopad na efektivitu, výkon, skladování a další vývoj databáze.

pokud vezmeme první dva, optimalizátor dotazu vygeneruje plán provádění v závislosti na tom, jaké typy dat se používají., Velmi jednoduchým příkladem může být, pokud používáme datový typ bigint, kde bychom mohli používat smallint – no, pravděpodobně jen zpomalujeme dotaz. Výběr správného datového typu SQL nakonec povede k efektivnějšímu fungování optimalizátoru dotazů.

je dobré poskytnout dokumentaci pro sebe a ostatní pomocí databáze o datových typech, které vstupují do objektů. Je samozřejmé, ale vyvarujte se zastaralých datových typů, vždy zkontrolujte nejnovější dokumentaci společnosti Microsoft pro zprávy a aktualizace., Pokud existuje malá šance, že budete pracovat s neanglickými daty, vždy používejte datové typy Unicode. Dále použijte datové typy sysname pro administrativní skripty přes nvarchar.

příklady datového typu SQL

přeskočme na SSMS a uvidíme, jak můžeme pracovat s některými typy dat uvedenými v předchozích sekcích. Projdeme konverze, řídké sloupce a datové typy aliasů.

konverze

funkce Cast, Convert a Parse převádějí výraz jednoho datového typu SQL na jiný., Níže je uveden příklad dotazu, který lze použít na ukázkové databázi „AdventureWorks“ proti tabulce „Transaktionhistory“. Je to chytil „ProductID“ a „TransactionDate“, ze které můžeme použít, že datum transakce vidět, jak převod funguje:

Tady je výsledek sada různých SQL datové typy:

Jsme použili Obsazení funkce proti TransactionDate převést hodnoty nvarchar na délku 30. Dále jsme použili Convert, abychom udělali totéž, ale pak jsme také zadali formát 110, který nám dává konkrétní styl data., Nakonec jsme použili Parse, která v podstatě funguje stejně, ale můžeme na ni aplikovat kulturu.,podívejte se na výsledek a uvidíme, co máme:

  1. máme Tady datum a čas transakce, jak to sedí v databázi (datový typ datetime)
  2. Zde je, jak to vypadá, když jsme obsazení jako textová reprezentace
  3. Převod dělá stejnou věc, ale v tomto případě, jsme určující, jak Převést funkce bude překládat výraz (110 = mm-dd-rrrr)
  4. Analýza v tomto případě, jen překládá požadovaných dat pomocí specifické kultury (en-US)

Next, pojďme se podívat na nějaké další věci, které můžeme udělat s Parse funkce., Parse je skvělá s převodem řetězců na data a celá čísla. Například, pokud budeme provádět Select níže, bude to chytit řetězec 100.000 a přeměnit ji na celé číslo:

1
VYBERTE PARSE(‚100.,000‘ JAKO INT) JAKO StringToInt;

Zde je výsledek:

Nyní, řekněme, že chceme udělat to samé znovu, ale z nějakého důvodu, integer má charakter v tom, že SQL Server nelze převést na celé číslo:

1
VYBERTE PARSE(’10O.,000′ JAKO INT) JAKO StringToIntError;

Zde je chybová zpráva, že to hází:

Msg 9819, Úroveň 16, Stav 1, Řádek 2
Error converting string hodnota ’10O.000′ na datový typ int pomocí kultury „.,

Takže, co můžeme udělat v tomto případě je použití Try_Parse namísto pravidelných Analyzovat, protože, když se budeme snažit o to samé z výše, vrátí hodnotu null spíše než chyba:

1
VYBERTE TRY_PARSE(’10O.,000′ JAKO INT) JAKO StringToIntNull;

Zde je, jak to vypadá:

Tato metoda může být použita jako identifikátor, pokud něco by chyba dopředu AKA defenzivní kódování. Pokusy lze použít i pro další dva datové typy SQL.

řídké sloupce

Jak jsem zmínil na začátku, řídké sloupce snižují požadavky na nulový prostor., So, let’s jump to Object Explorer in our sample database, locate and query BillOfMaterials table to see how this works:

1
2

SELECT *
FROM Production.,BillOfMaterials bom;

Všimněte si, že existuje mnoho hodnot null ve ProductAssemblyID a EndDate sloupce:

Proto můžeme říci, že tyto dva jsou dobrými kandidáty pro řídké sloupce., Tak, jeden způsob, jak to změnit, je jednoduše změnit vlastnost v návrháři nebo to můžeme udělat pomocí T-SQL kód z níže:

1
2
3
4

ALTER TABLE Výroby.BillOfMaterials ALTER COLUMN ProductAssemblyID ADD SPARSE;
GO
ALTER TABLE Production.,BillOfMaterials ALTER SLOUPEC EndDate PŘIDAT ŘÍDKÉ;

Příkazy nebyla úspěšně dokončena první čas, takže jsem musel ztratit seskupený index (řádek 7) a pak šlo všechno jako po másle:

Pokud se vrátíme k Objektu Explorer, aktualizovat BillOfMaterials tabulky, můžeme vidět, že ti dva jsou nyní označeny jako řídký sloupce:

Pěkné, že jo. Ještě jedna úhledná věc o řídkých sloupcích se nazývá sady sloupců., To je užitečné v situaci, kdy máme tabulku, která obsahuje spoustu zvláštního určení sloupců, které se používá jen zřídka, jako v našem příkladu ProductAssemblyID a EndDate sloupce nebo AddressLine2, MiddleName, atd. Takže myšlenka se sadou sloupců je, že SQL Server vezme všechny tyto sloupce a dá nám generovaný sloupec XML, který je aktualizovatelný. To může vést k zvýšení výkonu aplikace, protože SQL Server může pracovat s nastavením sloupce spíše než s každým řídkým sloupcem jednotlivě.,

So, let’s add a column set using those two examples from above using the following command:

1
2
3

ALTER TABLE Production.,BillOfMaterials
PŘIDAT SparseColumns XML COLUMN_SET PRO ALL_SPARSE_COLUMNS;

Takže, pokud se budeme snažit přidat sloupec nastavit, ale náš stůl už má řídké sloupce, to bude chyba:

Msg 1734, Úroveň 16, Stav 1, Řádek 9
Nelze vytvořit sparse sloupec nastavit ‚SparseColumns‘ v tabulce ‚BillOfMaterials‘ protože tabulka již obsahuje jeden nebo více sloupců řídce používaný. Pokud tabulka obsahuje řídký sloupec, nelze do tabulky přidat sadu řídkých sloupců.,

Pokud se s tím někdy setkáte, nejjednodušším řešením je vrátit zpět řídké sloupce. To lze snadno provést u návrháře. Prostě to otevři z Průzkumník Objektů, vyberte sloupec, který potřebujete, a v vlastnosti sloupce změnit Je Analyzovat vlastnost Ne, jak je uvedeno níže:

Teď, když jsme se spustit příkaz ještě jednou, to bude úspěšné:

spodní řádek tady, nechcete přidat řídké sloupce první – přidejte sloupec nastaví první, a pak řídké sloupce. Tímto způsobem to nebudete muset dělat tvrdě., Co je na tom opravdu hezké, naše příkazy DML, jako je výběr, vkládání a aktualizace, mohou stále fungovat starým způsobem odkazem na sloupce jednotlivě nebo to můžeme udělat pomocí sad sloupců.

uživatelsky definované datové typy SQL

pojďme zabalit věci s vytvořením vlastního datového typu. Vytvoříme datový typ aliasu, který je založen na jiném datovém typu. Řekněme, že máme potřebu ukládat adresy URL v naší tabulce a chceme vytvořit skutečný typ dat URL., All we need to do is execute the code from below:

1
2
3

CREATE TYPE url
FROM varchar(2048) NOT NULL
GO

URLs are just characters, so the varchar data type is perfect for this., Jsem nastavit max hodnotu 2048, protože toto vlákno, které jsem našel na internetu, která uvádí, že byste měli mít své adresy Url v rámci 2048 znaků:

můžeme vidět, tento nový SQL typ dat, pokud se vydáme přes Průzkumník Objektů, pod Programovatelnost, Typy, Uživatelem Definované Datové Typy složek:

Z tu, můžeme začít používat nově vytvořený datový typ., Just an example:

1
2
3

ALTER TABLE Purchasing.Vendor
ADD PurchasingWebServiceURL2 url NULL
GO

Conclusion

In this article, we learned how to implement SQL data types., Začali jsme s přehledem jen proto, abychom se seznámili s některými vestavěnými datovými typy. Pak jsme mluvili o některých věcech, které je třeba zvážit při práci s datovými typy a konverzí pomocí funkcí Cast, Convert a Parse. Také jsme skočili do SSMS, kde jsme ukázali, jak převést výraz jednoho datového typu na jiný. Prošli jsme, jak pracovat s řídkými sloupci, a pak jsme také viděli, jak vytvořit vlastní datové typy.

doufám, že tento článek o datových typech SQL byl pro vás informativní a děkuji vám za jeho přečtení.,

  • Autora
  • Poslední Příspěvky
Bojan aka „Boksi“, AP absolvent v NĚM Technologií se zaměřením na Sítě a elektronické technologie z Copenhagen School of Design and Technology, je softwarový analytik se zkušenostmi v zajišťování kvality, podpora softwaru, produktu evangelizace, a zapojení uživatelů.,
napsal rozsáhle jak na SQL Shack, tak na řešení ApexSQL Center, na témata od klientských technologií, jako je rozlišení 4K a theming, manipulace s chybami až po indexové strategie a monitorování výkonu.
Bojan pracuje v ApexSQL v Nis, Srbsko nedílnou součástí týmu, se zaměřením na navrhování, vyvíjení a testování další generace z databáze nástrojů včetně MySQL a SQL Server, a oba stand-alone nástroje a integrace do Visual Studio, SSMS, a VSCode.,
více o Bojan na LinkedIn
Zobrazit všechny příspěvky od Bojan Petrovic

Nejnovější příspěvky od Bojan Petrovic (zobrazit všechny)
  • Visual Studio Code pro MySQL a MariaDB rozvoj – 13. srpna 2020
  • AKTUALIZACE SQL syntaxe vysvětlil – 10. července 2020
  • VYTVOŘIT ZOBRAZENÍ SQL: Práce s indexovaná zobrazení SQL Server – 24. Března 2020

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *