问答中心分类: SQLSQL server查询以获取表中的列列表以及数据类型、非空和主键约束
0
匿名用户 提问 23小时 前

我需要在SQL server上编写一个查询,以获取特定表中的列列表、其关联的数据类型(带长度)以及它们是否不为null。我已经做到了这一点。
但现在我还需要在同一个表中,针对一列-TRUE如果该列是主键。
我该怎么做?
我的预期输出是:

Column name | Data type | Length | isnull | Pk
19 Answers
0
decompiled 回答 23小时 前

存储过程sp_列返回详细的表信息。

exec sp_columns MyTable
Leonardo Marques de Souza 回复 23小时 前

exec sp\u pkeys exec sp\ u fkeys

Daniel 回复 23小时 前

如果使用,请注意MyTable实际上只是表名,而不是模式。要筛选到架构,请将其作为第二个参数添加:exec sp_columns 'MyTable', 'MySchema'

0
Ajadex 回答 23小时 前

您可以使用以下查询:

select COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, 
       NUMERIC_PRECISION, DATETIME_PRECISION, 
       IS_NULLABLE 
from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME='TableName'

获取除Pk信息外所需的所有元数据。

Shrayas 回复 23小时 前

我做到了:)但我也需要PK:|

0
Amruta Kar 回答 23小时 前

在SQL 2012中,您可以使用:

EXEC sp_describe_first_result_set N'SELECT * FROM [TableName]'

这将为您提供列名及其属性。

Uttam 回复 23小时 前

这适用于使用OPENROWSET打开的Excel文件,而许多其他解决方案则不适用。非常感谢。

0
khaleel 回答 23小时 前

试试这个:

select COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, IS_NULLABLE 
from INFORMATION_SCHEMA.COLUMNS IC
where TABLE_NAME = 'tablename' and COLUMN_NAME = 'columnname'
Artemix 回复 23小时 前

你的答案与Ajadex发布的答案有何不同?两个答案都不返回主键信息。

0
Microsoft Developer 回答 23小时 前

为了确保获得正确的长度,需要将unicode类型视为特例。请参阅下面的代码。
有关更多信息,请参阅:https://msdn.microsoft.com/en-us/library/ms176106.aspx

SELECT 
   c.name 'Column Name',
   t.name,
   t.name +
   CASE WHEN t.name IN ('char', 'varchar','nchar','nvarchar') THEN '('+

             CASE WHEN c.max_length=-1 THEN 'MAX'

                  ELSE CONVERT(VARCHAR(4),

                               CASE WHEN t.name IN ('nchar','nvarchar')

                               THEN  c.max_length/2 ELSE c.max_length END )

                  END +')'

          WHEN t.name IN ('decimal','numeric')

                  THEN '('+ CONVERT(VARCHAR(4),c.precision)+','

                          + CONVERT(VARCHAR(4),c.Scale)+')'

                  ELSE '' END

   as "DDL name",
   c.max_length 'Max Length in Bytes',
   c.precision ,
   c.scale ,
   c.is_nullable,
   ISNULL(i.is_primary_key, 0) 'Primary Key'
FROM    
   sys.columns c
INNER JOIN 
   sys.types t ON c.user_type_id = t.user_type_id
LEFT OUTER JOIN 
   sys.index_columns ic ON ic.object_id = c.object_id AND ic.column_id = c.column_id
LEFT OUTER JOIN 
   sys.indexes i ON ic.object_id = i.object_id AND ic.index_id = i.index_id
WHERE
   c.object_id = OBJECT_ID('YourTableName')
George Menoutis 回复 23小时 前

DDL名称对于创建表的动态sql非常有用!谢谢