代码之家  ›  专栏  ›  技术社区  ›  Leif Neland

获取列、varchar或nvarchar的实际长度/避免截断错误[duplicate]

  •  0
  • Leif Neland  · 技术社区  · 7 年前

    我想创建一个SQL语句,当执行时,它将返回1000,或者将来可能更改varchar字段的大小。

    有点像 SELECT size(Remarks) FROM mytable .

    我该怎么做?

    0 回复  |  直到 13 年前
        1
  •  122
  •   Neil Knight    15 年前
    select column_name, data_type, character_maximum_length    
      from information_schema.columns  
     where table_name = 'myTable'
    
        2
  •  26
  •   UnDiUdin    11 年前

    特别是在SQL Server上:

    SELECT DATALENGTH(Remarks) AS FIELDSIZE FROM mytable
    

    Documentation

        3
  •  11
  •   Frank    9 年前

    对于SQL Server(2008及更高版本):

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

    COLUMNPROPERTY返回列或参数(id,column/parameter,property)的信息。PRECISION属性返回列或参数的数据类型的长度。

    COLUMNPROPERTY documentation

        4
  •  5
  •   Greg Quinn    10 年前

    这将在SQL SERVER上工作。。。

    SELECT COL_LENGTH('Table', 'Column')
    
        5
  •  1
  •   ProVega    11 年前

    我在寻找专栏的总大小,然后点击这篇文章,我的解决方案是基于MarcE的。

    SELECT sum(DATALENGTH(your_field)) AS FIELDSIZE FROM your_table
    
        6
  •  0
  •   Andrei Sura AnhellO    9 年前

    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
    
        7
  •  0
  •   Bengi Besçeli    9 年前
    select column_name, data_type, character_maximum_length    
    from INFORMATION_SCHEMA.COLUMNS
    where table_name = 'Table1'
    
        8
  •  0
  •   Ihor Konovalenko Paritosh Tripathi    6 年前

    此函数用于计算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
    

    用法:

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