Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Utilisez COL_LENGTH() pour obtenir la longueur d'une colonne dans SQL Server

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.