如何在一个SQL语句中获取varchar 字段的大小?

假设我有一个名为“Remarks”的varchar [1000]字段的SQL表。

我想制作一个单一的SQL语句,它在执行时会返回1000,或者将来可能会更改varchar字段的大小。

SELECT size(Remarks) FROM mytable

我该怎么做呢?

 select column_name, data_type, character_maximum_length from information_schema.columns where table_name = 'myTable' 

在SQL Server上专门:

 SELECT DATALENGTH(Remarks) AS FIELDSIZE FROM mytable 

文档

这将在SQL SERVER上工作…

 SELECT COL_LENGTH('Table', 'Column') 

我正在寻找这个栏目的总大小,并打这篇文章,我的解决scheme是基于MarcE的。

 SELECT sum(DATALENGTH(your_field)) AS FIELDSIZE FROM your_table 

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

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

COLUMNPROPERTY返回列或参数(id,列/参数,属性)的信息。 PRECISION属性返回列或参数的数据types的长度。

COLUMNPROPERTY文档

用于计算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列使用以下查询(显示sorting规则和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 
 select column_name, data_type, character_maximum_length from INFORMATION_SCHEMA.COLUMNS where table_name = 'Table1'