sql >> Databasteknik >  >> RDS >> Sqlserver

3 sätt att få en kolumns datatyp i SQL Server (T-SQL)

GUI som SSMS eller Azure Data Studio gör det enkelt att se en kolumns datatyp. Vanligtvis är det en enkel fråga om att navigera till kolumnen i objektutforskaren och du kan se datatypen precis bredvid kolumnen.

Men om du använder T-SQL måste du köra en fråga.

information_schema.columns Visa

information_schema.columns view är ett bra alternativ om du bara vill ha datatypen och inte mer:

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';

Exempelresultat:

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

Ersätt Products och ProductName med namnet på din tabell respektive kolumn.

OK, jag returnerade lite mer än bara datatypen här. Men du kan utelämna de andra kolumnerna om det behövs. Eller så kan du lägga till fler. Det finns till exempel kolumner som innehåller kolumnens precision om du tittar på en numerisk eller datetime-kolumn.

Du kan returnera alla kolumner så här:

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

sys.columns Visa

sys.columns vy är ett annat alternativ. Vi kan ansluta till detta med sys.tables visa för att hämta en specifik kolumn från en specifik tabell:

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';

Exempelresultat:

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

Återigen, inkludera fler eller färre kolumner efter behov.

I det här exemplet använde jag TYPE_NAME() funktion för att returnera namnet på datatypen, baserat på dess ID. Detta räddade mig från att behöva göra en join på sys.types bord.

sp_help Lagrad procedur

sp_help lagrad procedur kan vara användbar om du vill returnera mer information om tabellen.

Denna lagrade procedur returnerar information om ett databasobjekt (vilket objekt som helst som listas i sys.sysobjects kompatibilitetsvy), en användardefinierad datatyp eller en datatyp:

EXEC sp_help Products;

Detta ger mycket utdata, så jag kommer inte att lista allt här.

Byt bara ut Products med namnet på tabellen eller annat objekt du vill få information om.

Hämta en kolumns datatyp från en fråga

Du kan också få datatypen för kolumnerna som returneras av en fråga.

Se Ta reda på datatypen för kolumnerna som returneras i en resultatuppsättning i SQL Server för mer information och exempel.


  1. Vad är skillnaden mellan utf8mb4 och utf8 teckenuppsättningar i MySQL?

  2. Ingen lämplig drivrutin hittades för jdbc:postgresql://192.168.1.8:5432/NexentaSearch

  3. MariaDB JSON_ARRAY() Förklarad

  4. Byt namn på en tabell i SQL Server (T-SQL)