Ако някога ви се наложи да получите списък с типове данни в SQL Server, можете да използвате един от системните изгледи, за да направите точно това.
По-специално, можете да използвате sys.types
изглед на системния каталог. Този изглед връща всички предоставени от системата и дефинирани от потребителя типове данни, дефинирани в базата данни. Ако използвате SQL Server 2000 sys.systypes
трябва да свърши работа.
Пример 1 – sys.types
Преглед
sys.types
view е най-добрият за използване, ако използвате версия на SQL Server по-късно от SQL Server 2000.
Най-бързият/лесният начин за използване на sys.types
изглед е да изберете всичко. В този случай кодът ви може да изглежда така:
SELECT * FROM sys.types;
Това обаче връща много колони, които може да ви интересуват или не. Можете да го стесните само до онези колони, които ви интересуват.
Ето пример за избор на някои колони, представляващи интерес:
SELECT name, max_length, [precision], scale, is_user_defined FROM sys.types;
Резултат:
+------------------+--------------+-------------+---------+-------------------+ | 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 | +------------------+--------------+-------------+---------+-------------------+
Това са типовете данни в текущата база данни. Ако преминете към друга база данни, можете да получите различни резултати (това ще зависи до голяма степен от това дали са дефинирани някакви потребителски типове данни или псевдоними и дали те се различават между базите данни или не).
Пример 2 – Псевдоним и потребителски дефинирани типове данни
В предишния пример включих is_user_defined
колона. Можем да видим, че нито един от типовете данни не е потребителски дефиниран или псевдоним, тъй като всички те имат 0
като тяхната стойност.
Нека създадем тип данни за псевдоним и след това да видим как се появява в резултатите.
Създайте псевдоним тип данни:
CREATE TYPE SSN FROM varchar(11) NOT NULL;
Сега нека стартираме заявката отново.
SELECT name, max_length, [precision], scale, is_user_defined FROM sys.types;
Резултат:
+------------------+--------------+-------------+---------+-------------------+ | 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 | +------------------+--------------+-------------+---------+-------------------+
Появява се новият тип данни (в долната част). Също така има стойност 1
в is_user_defined
колона.
sys.systypes
Преглед
Има и sys.systypes
изглед за съвместимост на системата, който се предоставя само за обратна съвместимост. Това е така, защото systypes
беше името на системна таблица в SQL Server 2000 и може да има много наследени системи с код, който препраща към тази таблица.
Microsoft посочи, че sys.systypes
изгледът за съвместимост на системата ще бъде премахнат в бъдеща версия на Microsoft SQL Server и затова препоръчва да избягвате да използвате този изглед в нова работа.
С други думи, използвайте sys.types
вместо товато ако можеш.
Но ако все още използвате по-ранна версия на SQL Server, ще трябва да използвате sys.systypes
.
Имайте предвид, че sys.systypes
съдържа различни имена на колони/колони за sys.types
, така че имената на колоните, които използвах в предишния пример, няма да работят.
Все още можете да изберете всички колони, като използвате звездичката (*
) обаче заместващ знак:
SELECT * FROM sys.systypes;