Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak zwrócić listę typów danych w SQL Server (T-SQL)

Jeśli kiedykolwiek będziesz potrzebować listy typów danych w SQL Server, możesz użyć jednego z widoków systemowych, aby to zrobić.

W szczególności możesz użyć sys.types widok katalogu systemowego. Ten widok zwraca wszystkie dostarczone przez system i zdefiniowane przez użytkownika typy danych zdefiniowane w bazie danych. Jeśli używasz SQL Server 2000 sys.systypes powinien załatwić sprawę.

Przykład 1 – sys.types Zobacz

sys.types widok jest najlepszy do użycia, jeśli używasz wersji SQL Server późniejszej niż SQL Server 2000.

Najszybszy/najłatwiejszy sposób użycia sys.types Widok to zaznaczenie wszystkiego. W takim przypadku Twój kod może wyglądać tak:

SELECT * FROM sys.types;

Zwraca to jednak wiele kolumn, którymi możesz być zainteresowany lub nie. Możesz zawęzić je tylko do tych kolumn, które Cię interesują.

Oto przykład wyboru kilku interesujących kolumn:

SELECT 
  name,
  max_length,
  [precision],
  scale,
  is_user_defined
FROM sys.types;

Wynik:

+------------------+--------------+-------------+---------+-------------------+
| 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                 |
+------------------+--------------+-------------+---------+-------------------+

Są to typy danych w aktualnej bazie danych. Jeśli przełączysz się na inną bazę danych, możesz uzyskać różne wyniki (zależy to w dużej mierze od tego, czy zdefiniowano jakiekolwiek typy danych zdefiniowane przez użytkownika lub typy danych aliasów oraz czy różnią się one między bazami danych).

Przykład 2 – Alias ​​i typy danych zdefiniowane przez użytkownika

W poprzednim przykładzie uwzględniłem is_user_defined kolumna. Widzimy, że żaden z typów danych nie jest zdefiniowany przez użytkownika ani alias, ponieważ wszystkie mają 0 jako ich wartość.

Utwórzmy typ danych aliasu, a następnie zobaczmy, jak wygląda w wynikach.

Utwórz typ danych aliasu:

CREATE TYPE SSN  
FROM varchar(11) NOT NULL;

Teraz uruchommy zapytanie ponownie.

SELECT 
  name,
  max_length,
  [precision],
  scale,
  is_user_defined
FROM sys.types;

Wynik:

+------------------+--------------+-------------+---------+-------------------+
| 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                 |
+------------------+--------------+-------------+---------+-------------------+

Pojawi się nowy typ danych (na dole). Ma również wartość 1 w is_user_defined kolumna.

sys.systypes Zobacz

Istnieje również sys.systypes widok zgodności systemu, który jest udostępniany tylko w celu zapewnienia zgodności z poprzednimi wersjami. Dzieje się tak, ponieważ systypes była nazwą tabeli systemowej w SQL Server 2000 i może istnieć wiele starszych systemów z kodem, który odwołuje się do tej tabeli.

Microsoft wskazał, że sys.systypes widok zgodności systemowej zostanie usunięty w przyszłej wersji programu Microsoft SQL Server, dlatego zaleca się unikanie używania tego widoku w nowych pracach.

Innymi słowy, użyj sys.types zamiast tego Jeśli możesz.

Ale jeśli nadal używasz wcześniejszej wersji SQL Server, będziesz musiał użyć sys.systypes .

Zauważ, że sys.systypes zawiera różne nazwy kolumn/kolumn niż sys.types , więc nazwy kolumn, których użyłem w poprzednim przykładzie, nie będą działać.

Nadal możesz wybrać wszystkie kolumny za pomocą gwiazdki (* ) symbol wieloznaczny:

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. Unia serwerów SQL, ale zachowaj porządek

  2. Jaka jest różnica między Scope_Identity(), Identity(), @@Identity i Ident_Current()?

  3. SQL Server, wprowadzający w błąd XLOCK i optymalizacje

  4. Czy są jakieś darmowe narzędzia do generowania skryptów 'INSERT INTO' w MS SQL Server?

  5. Jak zwrócić listę zdarzeń wyzwalających w SQL Server