In SQL Server puoi utilizzare COL_LENGTH()
funzione per ottenere la lunghezza di una colonna. Più precisamente, la funzione restituisce la lunghezza definita della colonna, in byte.
La funzione accetta due argomenti:il nome della tabella e il nome della colonna.
Esempio 1 – Utilizzo di base
Ecco un esempio da dimostrare.
USE Music; SELECT COL_LENGTH('dbo.Artists', 'ArtistName') AS Result;
Risultato:
+----------+ | Result | |----------| | 510 | +----------+
Esempio 2 – Database errato?
Se ottieni un risultato NULL, controlla che stai interrogando il database corretto.
L'esempio precedente utilizza un database chiamato Music
e quel database ha una tabella e una colonna di quei nomi. Se il database non ha una combinazione tabella/colonna come specificato, il risultato è NULL
.
Ecco cosa succede se interrogo il database sbagliato:
USE WideWorldImportersDW; SELECT COL_LENGTH('dbo.Artists', 'ArtistName') AS Result;
Risultato:
+----------+ | Result | |----------| | NULL | +----------+
Esempio 3:altre colonne
Ecco un esempio che restituisce più colonne della stessa tabella.
USE Music; DECLARE @table_name nvarchar(50) = 'dbo.Artists'; SELECT COL_LENGTH(@table_name, 'ArtistId') AS ArtistId, COL_LENGTH(@table_name, 'ArtistName') AS ArtistName, COL_LENGTH(@table_name, 'ActiveFrom') AS ActiveFrom, COL_LENGTH(@table_name, 'CountryId') AS CountryId;
Risultato:
+------------+--------------+--------------+-------------+ | ArtistId | ArtistName | ActiveFrom | CountryId | |------------+--------------+--------------+-------------| | 4 | 510 | 3 | 4 | +------------+--------------+--------------+-------------+
Esempio 4 – Interrogazione di sys.columns
In questo esempio confronto i risultati con max_length
colonna di sys.columns
vista di sistema.
SELECT OBJECT_NAME(object_id) AS [Table Name], name AS [Column Name], max_length, COL_LENGTH(OBJECT_NAME(object_id), name) AS [COL_LENGTH()] FROM sys.columns WHERE name IN ('ArtistId', 'ArtistName', 'ActiveFrom', 'CountryId');
Risultato:
+-------------------+---------------+--------------+----------------+ | Table Name | Column Name | max_length | COL_LENGTH() | |-------------------+---------------+--------------+----------------| | ufn_AlbumsByGenre | ArtistName | 510 | 510 | | Artists | ArtistId | 4 | 4 | | Artists | ArtistName | 510 | 510 | | Artists | ActiveFrom | 3 | 3 | | Artists | CountryId | 4 | 4 | | Albums | ArtistId | 4 | 4 | | Country | CountryId | 4 | 4 | | RockAlbums | ArtistName | 510 | 510 | | JazzAlbums | ArtistName | 510 | 510 | | BluesAlbums | ArtistName | 510 | 510 | +-------------------+---------------+--------------+----------------+
Le colonne e le rispettive lunghezze qui restituite provengono da più tabelle. Nel caso di ArtistId
, c'è una chiave primaria con questo nome in Artists
tabella e una chiave esterna con lo stesso nome negli Albums
tavolo. Questa query restituisce anche colonne da tre viste, oltre a una funzione con valori di tabella.