sql >> Databáze >  >> RDS >> Sqlserver

Jak vrátit seznam typů dat v SQL Server (T-SQL)

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;

  1. volání uloženého procesu přes dblink

  2. Jak získat model obnovy databáze v SQL Server pomocí T-SQL

  3. Vytvořte dočasnou tabulku na serveru SQL Server

  4. Nejlepší způsoby, jak zvýšit efektivitu databáze