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?


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'

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


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



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

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

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'

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]();
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.