Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

3 modi per ottenere il tipo di dati di una colonna in SQL Server (T-SQL)

GUI come SSMS o Azure Data Studio semplificano la visualizzazione del tipo di dati di una colonna. Di solito è semplice passare alla colonna in Esplora oggetti e puoi vedere il tipo di dati proprio accanto alla colonna.

Ma se stai usando T-SQL, dovrai eseguire una query.

Il information_schema.columns Visualizza

Il information_schema.columns view è una buona opzione se vuoi semplicemente il tipo di dati e non di più:

SELECT 
    COLUMN_NAME, 
    DATA_TYPE, 
    CHARACTER_MAXIMUM_LENGTH AS MAX_LENGTH, 
    CHARACTER_OCTET_LENGTH AS OCTET_LENGTH 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'Products' 
AND COLUMN_NAME = 'ProductName';

Esempio di risultato:

+---------------+-------------+--------------+----------------+
| COLUMN_NAME   | DATA_TYPE   | MAX_LENGTH   | OCTET_LENGTH   |
|---------------+-------------+--------------+----------------|
| ProductName   | varchar     | 255          | 255            |
+---------------+-------------+--------------+----------------+

Sostituisci Products e ProductName rispettivamente con il nome della tabella e della colonna.

OK, ho restituito un po 'più del semplice tipo di dati qui. Ma puoi omettere le altre colonne se necessario. Oppure puoi aggiungerne altri. Ad esempio, ci sono colonne che contengono la precisione della colonna nel caso tu stia guardando una colonna numerica o data/ora.

Puoi restituire tutte le colonne in questo modo:

SELECT *
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'Products' 
AND COLUMN_NAME = 'ProductName';

Il sys.columns Visualizza

Il sys.columns la vista è un'altra opzione. Possiamo unirci a questo con sys.tables view per ottenere una colonna specifica da una tabella specifica:

SELECT 
    c.name,
    type_name(c.system_type_id) AS system_type,
    type_name(c.user_type_id) AS user_type,
    c.max_length,
    c.precision,
    c.scale
FROM sys.tables t 
JOIN sys.columns c ON t.object_id = c.object_id
WHERE t.name = 'Products'
AND c.name = 'ProductName';

Esempio di risultato:

+-------------+---------------+-------------+--------------+-------------+---------+
| name        | system_type   | user_type   | max_length   | precision   | scale   |
|-------------+---------------+-------------+--------------+-------------+---------|
| ProductName | varchar       | varchar     | 255          | 0           | 0       |
+-------------+---------------+-------------+--------------+-------------+---------+

Anche in questo caso, includi più o meno colonne come richiesto.

In questo esempio, ho usato TYPE_NAME() funzione per restituire il nome del tipo di dati, in base al suo ID. Questo mi ha evitato di dover fare un join su sys.types tabella.

Il sp_help Procedura memorizzata

Il sp_help stored procedure può essere utile se si desidera restituire maggiori informazioni sulla tabella.

Questa procedura memorizzata restituisce informazioni su un oggetto database (qualsiasi oggetto elencato in sys.sysobjects visualizzazione compatibilità), un tipo di dati definito dall'utente o un tipo di dati:

EXEC sp_help Products;

Questo restituisce molto output, quindi non lo elencherò tutto qui.

Sostituisci semplicemente Products con il nome della tabella o altro oggetto di cui vuoi ottenere informazioni.

Ottieni il tipo di dati di una colonna da una query

Puoi anche ottenere il tipo di dati delle colonne restituite da una query.

Per ulteriori informazioni ed esempi, vedere Scopri il tipo di dati delle colonne restituite in un set di risultati in SQL Server.