sql >> Databasteknik >  >> RDS >> Sqlserver

Använd COL_LENGTH() för att få en kolumns längd i SQL Server

I SQL Server kan du använda COL_LENGTH() funktion för att få längden på en kolumn. Mer specifikt returnerar funktionen den definierade längden på kolumnen, i byte.

Funktionen accepterar två argument:tabellnamnet och kolumnnamnet.

Exempel 1 – Grundläggande användning

Här är ett exempel att visa.

USE Music;
SELECT COL_LENGTH('dbo.Artists', 'ArtistName') AS Result;

Resultat:

+----------+
| Result   |
|----------|
| 510      |
+----------+

Exempel 2 – Fel databas?

Om du får ett NULL-resultat, kontrollera att du frågar efter rätt databas.

Det föregående exemplet använder en databas som heter Music och den databasen har en tabell och kolumn med dessa namn. Om databasen inte har en tabell/kolumnkombination som specificerats är resultatet NULL .

Så här händer om jag frågar fel databas:

USE WideWorldImportersDW;
SELECT COL_LENGTH('dbo.Artists', 'ArtistName') AS Result;

Resultat:

+----------+
| Result   |
|----------|
| NULL     |
+----------+

Exempel 3 – Några fler kolumner

Här är ett exempel som returnerar fler kolumner från samma tabell.

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;

Resultat:

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

Exempel 4 – Fråga sys.columns

I det här exemplet jämför jag resultaten med max_length kolumnen i sys.columns systemvy.

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');

Resultat:

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

Kolumnerna och deras respektive längder som returneras här är från flera tabeller. I fallet med ArtistId , det finns en primärnyckel med detta namn i Artists tabell och en främmande nyckel med samma namn i Albums tabell. Den här frågan råkar också returnera kolumner från tre vyer, såväl som en tabellvärderad funktion.


  1. Hur man får det aktuella datumet i Oracle

  2. Byt ut SQL-markörer med alternativ för att undvika prestandaproblem

  3. Infogar data för att spela in i sqlite

  4. Exportera en hel SQLite-databas till en SQL-fil