Как получить размер поля varchar [n] в одном операторе SQL? - PullRequest
63 голосов
/ 18 апреля 2011

Предположим, что у меня есть таблица SQL, в которой есть поле varchar [1000], называемое «Замечания».

Я хотел бы создать один оператор SQL, который при выполнении вернет 1000 или что-то ещеразмер поля varchar может быть изменен в будущем.

Что-то вроде SELECT size(Remarks) FROM mytable.

Как мне это сделать?

Ответы [ 8 ]

100 голосов
/ 18 апреля 2011
select column_name, data_type, character_maximum_length    
  from information_schema.columns  
 where table_name = 'myTable'
23 голосов
/ 18 апреля 2011

В частности, на SQL Server:

SELECT DATALENGTH(Remarks) AS FIELDSIZE FROM mytable

Документация

6 голосов
/ 24 августа 2017

Для SQL Server (2008 и выше):

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

COLUMNPROPERTY возвращает информацию для столбца или параметра (идентификатор, столбец / параметр, свойство). Свойство PRECISION возвращает длину типа данных столбца или параметра.

документация на охрану имущества

3 голосов
/ 29 июля 2016

Это будет работать на SQL SERVER ...

SELECT COL_LENGTH('Table', 'Column')
2 голосов
/ 01 июня 2015

Я искал ИТОГО размер столбца и нажал эту статью, мое решение основано на MarcE.

SELECT sum(DATALENGTH(your_field)) AS FIELDSIZE FROM your_table
0 голосов
/ 24 июля 2017
select column_name, data_type, character_maximum_length    
from INFORMATION_SCHEMA.COLUMNS
where table_name = 'Table1'
0 голосов
/ 27 октября 2016

Для t-SQL я использую следующий запрос для столбцов varchar (показывает параметры сортировки и 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
0 голосов
/ 27 ноября 2015

Где функция для расчета максимальной допустимой длины для 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]();
...