Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да върнете списък с типове данни в SQL Server (T-SQL)

Ако някога ви се наложи да получите списък с типове данни в 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;

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server Express Backup база данни | Как да планирате автоматизиране и почистване на SQL Express Backup

  2. SQL Server:комбиниране на няколко реда в един ред

  3. Неправилен синтаксис близо до ')', извикващ съхранена процедура с GETDATE

  4. 3 начина за извличане на месеца от дата в SQL Server (T-SQL)

  5. Форматиране на числа чрез запълване с водещи нули в SQL Server