Wie erhalte ich die Größe eines varchar [n] -Feldes in einer SQL-Anweisung?

78

Angenommen, ich habe eine SQL-Tabelle mit einem varchar [1000] -Feld namens "Remarks".

Ich möchte eine einzelne SQL-Anweisung erstellen, die bei Ausführung 1000 zurückgibt oder auf die Größe des varchar-Felds in Zukunft möglicherweise geändert wird.

So etwas wie SELECT size(Remarks) FROM mytable.

Wie mache ich das?

Vivian River
quelle
Dies hängt von dem RDBMS ab, an dem Sie arbeiten. Aber wie Neil sagte, müssen Sie möglicherweise im Informationsschema Ihres Servers suchen.
Marc Bouvier

Antworten:

121
select column_name, data_type, character_maximum_length    
  from information_schema.columns  
 where table_name = 'myTable'
Neil Knight
quelle
8
Sie können eine zusätzliche Klausel angeben, AND column_name = 'Remarks'wenn Sie nur eine Spalte herausfiltern möchten.
Sanjeevakumar Hiremath
3
Nur zu Ihrer Information, dies ist eine MySQL-spezifische Abfrage.
Pickypg
@ Pickypg: Die Frage ist für SQL Server 2008.
Neil Knight
7
INFORMATION_SCHEMAist ein ANSI-Standard - überhaupt nicht MySQL- oder SQL Server-spezifisch!
marc_s
AND table_schema = 'mydatabase'
Um
26

Speziell auf SQL Server:

SELECT DATALENGTH(Remarks) AS FIELDSIZE FROM mytable

Dokumentation

MarcE
quelle
2
Diese Anweisung gibt die Länge der bereits eingegebenen Daten zurück. Ich möchte die Größe der Daten, die das Feld enthalten wird.
Vivian River
1
Wenn Sie eine Postleitzahl, XML oder Datenproben, bitte diese Zeilen im Texteditor und klicken Sie auf den „Code - Beispiele“ Taste (markieren { }) auf der Editor - Symbolleiste zu schön Format und die Syntax markieren Sie es!
marc_s
11

Für SQL Server (2008 und höher):

SELECT COLUMNPROPERTY(OBJECT_ID('mytable'), 'Remarks', 'PRECISION');

COLUMNPROPERTY gibt Informationen für eine Spalte oder einen Parameter zurück (ID, Spalte / Parameter, Eigenschaft). Die PRECISION-Eigenschaft gibt die Länge des Datentyps der Spalte oder des Parameters zurück.

COLUMNPROPERTY-Dokumentation

Frank
quelle
5

Dies funktioniert auf SQL Server ...

SELECT COL_LENGTH('Table', 'Column')
Greg Quinn
quelle
3
Beachten Sie, dass dies die Länge in Bytes zurückgibt, sodass Sie sie für NVARCHARoder NCHARzum Beispiel halbieren müssen . Siehe docs.microsoft.com/en-us/sql/t-sql/functions/…
Bernhard Hofmann
1

Ich habe nach der GESAMT-Größe der Spalte gesucht und diesen Artikel gelesen. Meine Lösung basiert auf MarcEs.

SELECT sum(DATALENGTH(your_field)) AS FIELDSIZE FROM your_table
ProVega
quelle
0

Für t-SQL verwende ich die folgende Abfrage für varchar-Spalten (zeigt die Eigenschaften collation und is_null):

SELECT
    s.name
    , o.name as table_name
    , c.name as column_name
    , t.name as type
    , c.max_length
    , c.collation_name
    , c.is_nullable
FROM
    sys.columns c
    INNER JOIN sys.objects o ON (o.object_id = c.object_id)
    INNER JOIN sys.schemas s ON (s.schema_id = o.schema_id)
    INNER JOIN sys.types t ON (t.user_type_id = c.user_type_id)
WHERE
    s.name = 'dbo'
    AND t.name IN ('varchar') -- , 'char', 'nvarchar', 'nchar')
ORDER BY
    o.name, c.name
Andrei Sura
quelle
Bitte beachten Sie, dass dadurch die maximale Länge in Bytes angezeigt wird, was bedeutet, dass Sie für NVARCHAR-Spalten doppelte Größen erhalten.
Jens
0
select column_name, data_type, character_maximum_length    
from INFORMATION_SCHEMA.COLUMNS
where table_name = 'Table1'
mrbengi
quelle
0

Dies ist eine Funktion zur Berechnung der maximal gültigen Länge für Varchar (Nn):

CREATE FUNCTION [dbo].[GetMaxVarcharColumnLength] (@TableSchema NVARCHAR(MAX), @TableName NVARCHAR(MAX), @ColumnName VARCHAR(MAX))
RETURNS INT
AS
BEGIN
    RETURN (SELECT character_maximum_length FROM information_schema.columns  
            WHERE table_schema = @TableSchema AND table_name = @TableName AND column_name = @ColumnName);
END

Verwendung:

IF LEN(@Name) > [dbo].[GetMaxVarcharColumnLength]('person', 'FamilyStateName', 'Name') 
            RETURN [dbo].[err_Internal_StringForVarcharTooLong]();
Ihor Konovalenko
quelle