我需要在SQL server上编写一个查询,以获取特定表中的列列表、其关联的数据类型(带长度)以及它们是否不为null。我已经做到了这一点。
但现在我还需要在同一个表中,针对一列-TRUE
如果该列是主键。
我该怎么做?
我的预期输出是:
Column name | Data type | Length | isnull | Pk
19 Answers
存储过程sp_列返回详细的表信息。
exec sp_columns MyTable
exec sp\u pkeys exec sp\ u fkeys
如果使用,请注意MyTable
实际上只是表名,而不是模式。要筛选到架构,请将其作为第二个参数添加:exec sp_columns 'MyTable', 'MySchema'
您可以使用以下查询:
select COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH,
NUMERIC_PRECISION, DATETIME_PRECISION,
IS_NULLABLE
from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME='TableName'
获取除Pk信息外所需的所有元数据。
我做到了:)但我也需要PK:|
msdn.microsoft.com/pt br/library/ms189813(v=sql.120).aspxsp\u fkeys sp\u pkeys
在SQL 2012中,您可以使用:
EXEC sp_describe_first_result_set N'SELECT * FROM [TableName]'
这将为您提供列名及其属性。
这适用于使用OPENROWSET打开的Excel文件,而许多其他解决方案则不适用。非常感谢。
试试这个:
select COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, IS_NULLABLE
from INFORMATION_SCHEMA.COLUMNS IC
where TABLE_NAME = 'tablename' and COLUMN_NAME = 'columnname'
你的答案与Ajadex发布的答案有何不同?两个答案都不返回主键信息。
为了确保获得正确的长度,需要将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')
DDL名称对于创建表的动态sql非常有用!谢谢