Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Use COL_LENGTH() para obter o comprimento de uma coluna no SQL Server


No SQL Server, você pode usar o COL_LENGTH() função para obter o comprimento de uma coluna. Mais especificamente, a função retorna o comprimento definido da coluna, em bytes.

A função aceita dois argumentos:o nome da tabela e o nome da coluna.


Exemplo 1 – Uso básico


Aqui está um exemplo para demonstrar.
USE Music;
SELECT COL_LENGTH('dbo.Artists', 'ArtistName') AS Result;

Resultado:
+----------+
| Result   |
|----------|
| 510      |
+----------+

Exemplo 2 – Banco de dados incorreto?


Se você obtiver um resultado NULL, verifique se está consultando o banco de dados correto.

O exemplo anterior usa um banco de dados chamado Music e esse banco de dados tem uma tabela e uma coluna desses nomes. Se o banco de dados não tiver uma combinação de tabela/coluna conforme especificado, o resultado será NULL .

Aqui está o que acontece se eu consultar o banco de dados errado:
USE WideWorldImportersDW;
SELECT COL_LENGTH('dbo.Artists', 'ArtistName') AS Result;

Resultado:
+----------+
| Result   |
|----------|
| NULL     |
+----------+

Exemplo 3 – Mais Colunas


Aqui está um exemplo que retorna mais colunas da mesma tabela.
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;

Resultado:
+------------+--------------+--------------+-------------+
| ArtistId   | ArtistName   | ActiveFrom   | CountryId   |
|------------+--------------+--------------+-------------|
| 4          | 510          | 3            | 4           |
+------------+--------------+--------------+-------------+

Exemplo 4 – Consultando sys.columns


Neste exemplo, comparo os resultados com o max_length coluna do sys.columns visão do 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');

Resultado:
+-------------------+---------------+--------------+----------------+
| 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            |
+-------------------+---------------+--------------+----------------+

As colunas e seus respectivos comprimentos retornados aqui são de várias tabelas. No caso de ArtistId , há uma chave primária com este nome em Artists tabela e uma chave estrangeira com o mesmo nome nos Albums tabela. Essa consulta também retorna colunas de três exibições, bem como uma função com valor de tabela.