Pokud někdy potřebujete získat seznam datových typů na serveru SQL Server, můžete k tomu použít jedno ze systémových zobrazení.
Zejména můžete použít sys.types
zobrazení katalogu systému. Toto zobrazení vrátí všechny systémem dodané a uživatelem definované datové typy definované v databázi. Pokud používáte SQL Server 2000 sys.systypes
měl by stačit.
Příklad 1 – sys.types
Zobrazit
Soubor sys.types
zobrazení je nejlepší použít, pokud používáte verzi SQL Server novější než SQL Server 2000.
Nejrychlejší/nejjednodušší způsob použití sys.types
pohled je vybrat vše. V takovém případě může váš kód vypadat takto:
SELECT * FROM sys.types;
Tím se však vrátí mnoho sloupců, které vás mohou nebo nemusí zajímat. Můžete to zúžit pouze na ty sloupce, které vás zajímají.
Zde je příklad výběru některých sloupců zájmu:
SELECT name, max_length, [precision], scale, is_user_defined FROM sys.types;
Výsledek:
+------------------+--------------+-------------+---------+-------------------+ | name | max_length | precision | scale | is_user_defined | |------------------+--------------+-------------+---------+-------------------| | image | 16 | 0 | 0 | 0 | | text | 16 | 0 | 0 | 0 | | uniqueidentifier | 16 | 0 | 0 | 0 | | date | 3 | 10 | 0 | 0 | | time | 5 | 16 | 7 | 0 | | datetime2 | 8 | 27 | 7 | 0 | | datetimeoffset | 10 | 34 | 7 | 0 | | tinyint | 1 | 3 | 0 | 0 | | smallint | 2 | 5 | 0 | 0 | | int | 4 | 10 | 0 | 0 | | smalldatetime | 4 | 16 | 0 | 0 | | real | 4 | 24 | 0 | 0 | | money | 8 | 19 | 4 | 0 | | datetime | 8 | 23 | 3 | 0 | | float | 8 | 53 | 0 | 0 | | sql_variant | 8016 | 0 | 0 | 0 | | ntext | 16 | 0 | 0 | 0 | | bit | 1 | 1 | 0 | 0 | | decimal | 17 | 38 | 38 | 0 | | numeric | 17 | 38 | 38 | 0 | | smallmoney | 4 | 10 | 4 | 0 | | bigint | 8 | 19 | 0 | 0 | | hierarchyid | 892 | 0 | 0 | 0 | | geometry | -1 | 0 | 0 | 0 | | geography | -1 | 0 | 0 | 0 | | varbinary | 8000 | 0 | 0 | 0 | | varchar | 8000 | 0 | 0 | 0 | | binary | 8000 | 0 | 0 | 0 | | char | 8000 | 0 | 0 | 0 | | timestamp | 8 | 0 | 0 | 0 | | nvarchar | 8000 | 0 | 0 | 0 | | nchar | 8000 | 0 | 0 | 0 | | xml | -1 | 0 | 0 | 0 | | sysname | 256 | 0 | 0 | 0 | +------------------+--------------+-------------+---------+-------------------+
Toto jsou datové typy v aktuální databázi. Pokud přepnete na jinou databázi, můžete získat různé výsledky (to bude do značné míry záviset na tom, zda byly definovány nějaké uživatelem definované datové typy nebo aliasové datové typy a zda se liší mezi databázemi).
Příklad 2 – Alias a typy dat definované uživatelem
V předchozím příkladu jsem zahrnul is_user_defined
sloupec. Vidíme, že žádný z datových typů není uživatelsky definovaný nebo aliasový datový typ, protože všechny mají 0
jako jejich hodnotu.
Vytvořme datový typ aliasu a pak se podívejme, jak se objeví ve výsledcích.
Vytvořte datový typ aliasu:
CREATE TYPE SSN FROM varchar(11) NOT NULL;
Nyní spusťte dotaz znovu.
SELECT name, max_length, [precision], scale, is_user_defined FROM sys.types;
Výsledek:
+------------------+--------------+-------------+---------+-------------------+ | name | max_length | precision | scale | is_user_defined | |------------------+--------------+-------------+---------+-------------------| | image | 16 | 0 | 0 | 0 | | text | 16 | 0 | 0 | 0 | | uniqueidentifier | 16 | 0 | 0 | 0 | | date | 3 | 10 | 0 | 0 | | time | 5 | 16 | 7 | 0 | | datetime2 | 8 | 27 | 7 | 0 | | datetimeoffset | 10 | 34 | 7 | 0 | | tinyint | 1 | 3 | 0 | 0 | | smallint | 2 | 5 | 0 | 0 | | int | 4 | 10 | 0 | 0 | | smalldatetime | 4 | 16 | 0 | 0 | | real | 4 | 24 | 0 | 0 | | money | 8 | 19 | 4 | 0 | | datetime | 8 | 23 | 3 | 0 | | float | 8 | 53 | 0 | 0 | | sql_variant | 8016 | 0 | 0 | 0 | | ntext | 16 | 0 | 0 | 0 | | bit | 1 | 1 | 0 | 0 | | decimal | 17 | 38 | 38 | 0 | | numeric | 17 | 38 | 38 | 0 | | smallmoney | 4 | 10 | 4 | 0 | | bigint | 8 | 19 | 0 | 0 | | hierarchyid | 892 | 0 | 0 | 0 | | geometry | -1 | 0 | 0 | 0 | | geography | -1 | 0 | 0 | 0 | | varbinary | 8000 | 0 | 0 | 0 | | varchar | 8000 | 0 | 0 | 0 | | binary | 8000 | 0 | 0 | 0 | | char | 8000 | 0 | 0 | 0 | | timestamp | 8 | 0 | 0 | 0 | | nvarchar | 8000 | 0 | 0 | 0 | | nchar | 8000 | 0 | 0 | 0 | | xml | -1 | 0 | 0 | 0 | | sysname | 256 | 0 | 0 | 0 | | SSN | 11 | 0 | 0 | 1 | +------------------+--------------+-------------+---------+-------------------+
Zobrazí se nový datový typ (v dolní části). Má také hodnotu 1
v is_user_defined
sloupec.
sys.systypes
Zobrazit
Existuje také sys.systypes
zobrazení kompatibility systému, které je poskytováno pouze pro zpětnou kompatibilitu. Je to proto, že systypes
byl název systémové tabulky v SQL Server 2000 a mohlo existovat mnoho starších systémů s kódem, který na tuto tabulku odkazuje.
Microsoft uvedl, že sys.systypes
zobrazení kompatibility systému bude z budoucí verze Microsoft SQL Server odstraněno, a proto doporučuje, abyste se v nové práci vyvarovali používání tohoto zobrazení.
Jinými slovy, použijte sys.types
místo jestli můžeš.
Pokud však stále používáte dřívější verzi SQL Server, budete muset použít sys.systypes
.
Všimněte si, že sys.systypes
obsahuje jiné názvy sloupců/sloupců než sys.types
, takže názvy sloupců, které jsem použil v předchozím příkladu, nebudou fungovat.
Stále můžete vybrat všechny sloupce pomocí hvězdičky (*
) zástupný znak však:
SELECT * FROM sys.systypes;