Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como retornar uma lista de tipos de dados no SQL Server (T-SQL)


Se você precisar obter uma lista de tipos de dados no SQL Server, poderá usar uma das exibições do sistema para fazer exatamente isso.

Em particular, você pode usar o sys.types visualização do catálogo do sistema. Essa exibição retorna todos os tipos de dados definidos pelo usuário e fornecidos pelo sistema definidos no banco de dados. Se você estiver usando o SQL Server 2000 sys.systypes deve fazer o truque.


Exemplo 1 – Os sys.types Visualizar


Os sys.types view é a melhor para usar se você estiver usando uma versão do SQL Server posterior ao SQL Server 2000.

A maneira mais rápida/fácil de usar o sys.types view é selecionar tudo. Nesse caso, seu código pode ficar assim:
SELECT * FROM sys.types;

No entanto, isso retorna muitas colunas nas quais você pode ou não estar interessado. Você pode reduzi-lo apenas às colunas nas quais está interessado.

Aqui está um exemplo de seleção de algumas colunas de interesse:
SELECT 
  name,
  max_length,
  [precision],
  scale,
  is_user_defined
FROM sys.types;

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

Esses são os tipos de dados no banco de dados atual. Se você alternar para um banco de dados diferente, poderá obter resultados diferentes (isso dependerá em grande parte se quaisquer tipos de dados definidos pelo usuário ou tipos de dados de alias foram definidos e se eles diferem ou não entre os bancos de dados).

Exemplo 2 – Alias ​​e tipos de dados definidos pelo usuário


No exemplo anterior, incluí o is_user_defined coluna. Podemos ver que nenhum dos tipos de dados são tipos de dados de alias ou definidos pelo usuário, porque todos têm 0 como seu valor.

Vamos criar um tipo de dados de alias e ver como ele aparece nos resultados.

Crie o tipo de dados de alias:
CREATE TYPE SSN  
FROM varchar(11) NOT NULL;

Agora vamos executar a consulta novamente.
SELECT 
  name,
  max_length,
  [precision],
  scale,
  is_user_defined
FROM sys.types;

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

O novo tipo de dados aparece (na parte inferior). Ele também tem um valor de 1 no is_user_defined coluna.

Os sys.systypes Visualizar


Há também um sys.systypes visualização de compatibilidade do sistema, que é fornecida apenas para compatibilidade com versões anteriores. Isso ocorre porque systypes era o nome de uma tabela de sistema no SQL Server 2000, e pode haver muitos sistemas legados por aí com código que faça referência a essa tabela.

A Microsoft indicou que o sys.systypes A exibição de compatibilidade do sistema será removida em uma versão futura do Microsoft SQL Server e, portanto, recomenda que você evite usar essa exibição em novos trabalhos.

Em outras palavras, use sys.types em vez disso se você puder.

Mas se você ainda estiver usando uma versão anterior do SQL Server, precisará usar sys.systypes .

Observe que sys.systypes contém diferentes nomes de colunas/colunas para sys.types , então os nomes das colunas que usei no exemplo anterior não funcionarão.

Você ainda pode selecionar todas as colunas usando o asterisco (* ) caractere curinga:
SELECT * FROM sys.systypes;