Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Verwenden Sie COL_LENGTH(), um die Länge einer Spalte in SQL Server abzurufen

In SQL Server können Sie COL_LENGTH() verwenden Funktion, um die Länge einer Spalte zu erhalten. Genauer gesagt gibt die Funktion die definierte Länge der Spalte in Bytes zurück.

Die Funktion akzeptiert zwei Argumente:den Tabellennamen und den Spaltennamen.

Beispiel 1 – Grundlegende Verwendung

Hier ist ein Beispiel zur Veranschaulichung.

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

Ergebnis:

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

Beispiel 2 – Falsche Datenbank?

Wenn Sie ein NULL-Ergebnis erhalten, prüfen Sie, ob Sie die richtige Datenbank abfragen.

Das vorherige Beispiel verwendet eine Datenbank namens Music und diese Datenbank hat eine Tabelle und Spalte mit diesen Namen. Wenn die Datenbank keine Tabellen-/Spaltenkombination wie angegeben hat, ist das Ergebnis NULL .

Folgendes passiert, wenn ich die falsche Datenbank abfrage:

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

Ergebnis:

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

Beispiel 3 – Einige weitere Spalten

Hier ist ein Beispiel, das mehr Spalten aus derselben Tabelle zurückgibt.

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;

Ergebnis:

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

Beispiel 4 – Abfragen von sys.columns

In diesem Beispiel vergleiche ich die Ergebnisse mit max_length Spalte der sys.columns Systemansicht.

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

Ergebnis:

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

Die hier zurückgegebenen Spalten und ihre jeweiligen Längen stammen aus mehreren Tabellen. Im Fall von ArtistId , gibt es einen Primärschlüssel dieses Namens in den Artists Tabelle und einem gleichnamigen Fremdschlüssel in den Albums Tisch. Diese Abfrage gibt auch Spalten aus drei Ansichten sowie eine Tabellenwertfunktion zurück.