我的数据库托管在Microsoft SQL Server 2012上,我需要编写一个T-SQL查询来提取特定表的每列的长度。
假设我的数据库名为mydatabase
,并且该表名为table1
,其中包含3列(即col1
,col2
和col3
),我该怎么做写我的SQL查询来获取该信息?
理想情况下,我希望输出是这样的:
ColumnName Length
col1 50
col2 30
col3 25
其他信息:我需要在其他几个表中运行此查询,我不知道其中列的数量或名称。因此查询应输出列的名称及其各自的列长度。
答案 0 :(得分:2)
如果您要查找将返回列的最大允许长度的查询,那么您可以从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
答案 1 :(得分:2)
您可以使用COL_LENGTH
来获取此信息(可以找到更多信息here)
您可以写下类似内容:
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
您可以找到列/表的长度,而无需知道名称。
答案 2 :(得分:2)
我假设长度你的意思是,例如,如果它是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.systypes st ON c.system_type_id = st.xtype
WHERE t.[name] = 'YourTableName';