Dans SQL Server, vous pouvez utiliser le COL_LENGTH()
fonction pour obtenir la longueur d'une colonne. Plus précisément, la fonction renvoie la longueur définie de la colonne, en octets.
La fonction accepte deux arguments :le nom de la table et le nom de la colonne.
Exemple 1 - Utilisation de base
Voici un exemple pour illustrer.
USE Music; SELECT COL_LENGTH('dbo.Artists', 'ArtistName') AS Result;
Résultat :
+----------+ | Result | |----------| | 510 | +----------+
Exemple 2 – Mauvaise base de données ?
Si vous obtenez un résultat NULL, vérifiez que vous interrogez la bonne base de données.
L'exemple précédent utilise une base de données appelée Music
et cette base de données a une table et une colonne de ces noms. Si la base de données n'a pas de combinaison table/colonne comme spécifié, le résultat est NULL
.
Voici ce qui se passe si j'interroge la mauvaise base de données :
USE WideWorldImportersDW; SELECT COL_LENGTH('dbo.Artists', 'ArtistName') AS Result;
Résultat :
+----------+ | Result | |----------| | NULL | +----------+
Exemple 3 – Quelques colonnes supplémentaires
Voici un exemple qui renvoie plusieurs colonnes de la même table.
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;
Résultat :
+------------+--------------+--------------+-------------+ | ArtistId | ArtistName | ActiveFrom | CountryId | |------------+--------------+--------------+-------------| | 4 | 510 | 3 | 4 | +------------+--------------+--------------+-------------+
Exemple 4 – Interroger sys.columns
Dans cet exemple, je compare les résultats au max_length
colonne de sys.columns
vue système.
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');
Résultat :
+-------------------+---------------+--------------+----------------+ | 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 | +-------------------+---------------+--------------+----------------+
Les colonnes et leurs longueurs respectives renvoyées ici proviennent de plusieurs tables. Dans le cas de ArtistId
, il y a une clé primaire de ce nom dans les Artists
table et une clé étrangère du même nom dans les Albums
table. Cette requête renvoie également des colonnes de trois vues, ainsi qu'une fonction table.