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;