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

Utilizzare COL_LENGTH() per ottenere la lunghezza di una colonna in SQL Server

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.