获取特定表的每列长度的T-SQL语法是什么?

问题描述 投票:0回答:3

我的数据库托管在 Microsoft SQL Server 2012 上,我需要编写一个 T-SQL 查询来提取特定表的每列的长度。

假设我的数据库名为

mydatabase
,表名为
table1
,有 3 列(即
col1
col2
col3
),我如何编写 sql 查询来获取该信息?

理想情况下,我希望输出是这样的:

ColumnName    Length
  col1          50
  col2          30
  col3          25        

其他信息:我需要在其他几个表上运行此查询,我不知道其中的列数或名称。因此查询应该输出列的名称及其各自的列长度。

sql-server tsql
3个回答
4
投票

假设的长度是指,例如,如果它是

varchar(50)
,它的长度为50。如果它是
decimal(18,2)
,那么你想知道比例
18
,精度
2
。这应该有帮助:

SELECT c.[name] AS ColumnName, st.[name] AS DataType,
       CASE WHEN st.[name] IN ('varchar','nvarchar') THEN c.max_length END AS Max_Length,
       CASE WHEN st.[name] NOT IN ('varchar','nvarchar') THEN c.scale END AS Scale,
       CASE WHEN st.[name] NOT IN ('varchar','nvarchar') THEN c.[precision] END AS [Precision]
FROM sys.tables t
     JOIN sys.columns c ON t.object_id = c.object_id
     JOIN sys.types st ON c.system_type_id = st.system_type_id
WHERE t.[name] = 'YourTableName';

3
投票

如果您正在寻找将返回列的最大允许长度的查询,那么您可以从

INFORMATION_SCHEMA.COLUMN
视图

查看它
SELECT
    ORDINAL_POSITION,
    COLLATION_NAME,
    CHARACTER_MAXIMUM_LENGTH
    FROM INFORMATION_SCHEMA.COLUMNS
       WHERE TABLE_NAME = 'YourTableName'

或者如果您正在寻找存储数据的最大长度是每列 使用 MAX() 和 LEN() 函数

SELECT MAX(LEN(Col1)) FROM YourTable

2
投票

您可以使用

COL_LENGTH
来获取此信息(更多信息可以在这里找到)

您可以编写如下内容:

Select COL_LENGTH ( 'table1' , 'Col1' )
Select COL_LENGTH ( 'table1' , 'Col2' ) 
Select COL_LENGTH ( 'table1' , 'Col3' ) 

编辑:

通过提供的额外信息,我认为以下是您正在寻找的内容:

SELECT        
       t.name AS 'Table_Name'
      ,c.name  AS 'Column_Name'
      ,I.CHARACTER_MAXIMUM_LENGTH 
      ,I.DATA_TYPE
FROM  sys.columns c
JOIN  sys.tables  t   ON c.object_id = t.object_id
JOIN  INFORMATION_SCHEMA.COLUMNS I on I.COLUMN_NAME = c.name

您可能需要添加一个 where 子句,因为当前正在查找数据库上的所有内容。

通过将

sys.columns
sys.tables
information_schema.columns
连接起来 您可以找到列/表的长度,而无需知道名称。

© www.soinside.com 2019 - 2024. All rights reserved.