Как получить размер поля varchar[n] в одном операторе SQL?
предположим, что у меня есть таблица SQL, которая имеет поле varchar[1000] под названием "Примечания".
Я хотел бы создать один оператор SQL, который при выполнении вернет 1000 или независимо от того, какой размер поля varchar может быть изменен в будущем.
что-то вроде SELECT size(Remarks) FROM mytable
.
Как мне это сделать?
8 ответов:
select column_name, data_type, character_maximum_length from information_schema.columns where table_name = 'myTable'
для SQL Server (2008 и выше):
SELECT COLUMNPROPERTY(OBJECT_ID('mytable'), 'Remarks', 'PRECISION');
COLUMNPROPERTY возвращает информацию для столбца или параметра (id, столбец/параметр, свойство). Свойство PRECISION возвращает длину типа данных столбца или параметра.
Я искал общий размер столбца и попал в эту статью, мое решение основано на Марсе.
SELECT sum(DATALENGTH(your_field)) AS FIELDSIZE FROM your_table
где функция для вычисления максимальной допустимой длины для 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]();
для 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