Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取SQL表中每个字段的最大长度的查询_Sql_Sql Server 2012_Max_Maxlength_Adhoc Queries - Fatal编程技术网

获取SQL表中每个字段的最大长度的查询

获取SQL表中每个字段的最大长度的查询,sql,sql-server-2012,max,maxlength,adhoc-queries,Sql,Sql Server 2012,Max,Maxlength,Adhoc Queries,我一直在尝试提出一个查询,该查询将列出表中每个列的名称及其最大长度 这是在SQL Server 2012中实现的 非常感谢您的帮助。如果您想知道您的表的详细信息,请使用信息\u schema.columns select * from information_schema.columns where table_name = 'YourTableName' 如果需要字符串字段的长度,请使用 如果您想知道表的详细信息,请使用信息\u schema.columns select * from

我一直在尝试提出一个查询,该查询将列出表中每个列的名称及其最大长度

这是在SQL Server 2012中实现的


非常感谢您的帮助。

如果您想知道您的表的详细信息,请使用
信息\u schema.columns

select * 
from information_schema.columns 
where table_name = 'YourTableName'
如果需要字符串字段的长度,请使用


如果您想知道表的详细信息,请使用
信息\u schema.columns

select * 
from information_schema.columns 
where table_name = 'YourTableName'
如果需要字符串字段的长度,请使用


您可以使用下面的查询来获取表中列的实际长度和使用长度

 DECLARE @TSQL VARCHAR(MAX) = ''
DECLARE @TableName sysname = 't1'
SELECT @TSQL = @TSQL + 'SELECT ' + QUOTENAME(sc.name, '''') + ' AS ColumnName, ' + QUOTENAME(t.name, '''') + ' AS DataType, ' +
QUOTENAME(sc.max_length, '''') + ' AS ActualLength, MAX(DATALENGTH(' + QUOTENAME(sc.name) + ')) AS UsedLength FROM '+@TableName+ char(10) +' UNION '
FROM sys.columns sc
        JOIN sys.types t on t.system_type_id = sc.system_type_id and t.name != 'sysname'
WHERE sc.OBJECT_ID = OBJECT_ID(@TableName)
SET @TSQL = LEFT(@TSQL, LEN(@TSQL)-6)
EXEC(@TSQL)

您可以使用下面的查询来获取表中列的实际长度和使用长度

 DECLARE @TSQL VARCHAR(MAX) = ''
DECLARE @TableName sysname = 't1'
SELECT @TSQL = @TSQL + 'SELECT ' + QUOTENAME(sc.name, '''') + ' AS ColumnName, ' + QUOTENAME(t.name, '''') + ' AS DataType, ' +
QUOTENAME(sc.max_length, '''') + ' AS ActualLength, MAX(DATALENGTH(' + QUOTENAME(sc.name) + ')) AS UsedLength FROM '+@TableName+ char(10) +' UNION '
FROM sys.columns sc
        JOIN sys.types t on t.system_type_id = sc.system_type_id and t.name != 'sysname'
WHERE sc.OBJECT_ID = OBJECT_ID(@TableName)
SET @TSQL = LEFT(@TSQL, LEN(@TSQL)-6)
EXEC(@TSQL)

谢谢因此,对于包含字符的所有字段,character_maximum length字段只包含-1。(varchar(max))。如何获得表中内容的实际最大长度?我正在寻找一种动态方式,通过单个查询列出每个字段名称及其对应的最大长度。然后,您必须使用
信息\u架构创建动态查询。列
,您知道如何创建动态查询吗?不,我不知道怎么做。那么你在问如何创建查询来动态计算len之前,你需要问如何创建动态查询。检查类似的内容并不容易,但希望您能理解其中的基本概念。谢谢。因此,对于包含字符的所有字段,character_maximum length字段只包含-1。(varchar(max))。如何获得表中内容的实际最大长度?我正在寻找一种动态方式,通过单个查询列出每个字段名称及其对应的最大长度。然后,您必须使用
信息\u架构创建动态查询。列
,您知道如何创建动态查询吗?不,我不知道怎么做。那么你在问如何创建查询来动态计算len之前,你需要问如何创建动态查询。检查类似的内容并不容易,但希望您能理解其中的基本概念。您好,我试图使用此查询,但收到一条错误消息:Msg 537,级别16,状态5,第8行传递给LEFT或SUBSTRING函数的长度参数无效。@User3329160这是因为您没有提供需要详细信息的表名。。在这里用您的表名更新“t1”声明TableName sysname='t1'这对我有用。。。如果您使用的架构不是“dbo”,请确保指定:DECLARE@TableName sysname='[XYZ].[Table_Name]',在这之前输入数据库名可能不会有什么坏处。您好,我试图使用此查询,但收到一条错误消息:Msg 537,Level 16,State 5,第8行传递给LEFT或SUBSTRING函数的长度参数无效。@User3329160这是因为您没有提供需要详细信息的表名。。在这里用您的表名更新“t1”声明TableName sysname='t1'这对我有用。。。如果您使用的是“dbo”以外的架构,请确保指定:DECLARE@TableName sysname='[XYZ].[Table_Name]',在这之前输入数据库名称可能不会有什么坏处。