Sql server 获取表中所有列的信息(特别是主键)

Sql server 获取表中所有列的信息(特别是主键),sql-server,sql-server-2008,Sql Server,Sql Server 2008,我尝试获取表中所有列的信息 关于类型,名称列的示例信息,特别是关于主键的信息,但缺少 我用 它不包含有关主键的信息。如何得到那份感谢像这样的东西怎么样 SELECT * FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE OBJECTPROPERTY(OBJECT_ID(constraint_name), 'IsPrimaryKey') = 1 AND table_name = 'TableName' 也可以试试 SELECT i.name AS I

我尝试获取表中所有列的信息
关于
类型
名称
列的示例信息,特别是关于
主键
的信息,但缺少
我用


它不包含有关
主键的信息。如何得到那份感谢

像这样的东西怎么样

SELECT *
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE OBJECTPROPERTY(OBJECT_ID(constraint_name), 'IsPrimaryKey') = 1
AND table_name = 'TableName'
也可以试试

SELECT  i.name AS IndexName,
        OBJECT_NAME(ic.OBJECT_ID) AS TableName,
        COL_NAME(ic.OBJECT_ID,ic.column_id) AS ColumnName,
        c.*
FROM    sys.indexes AS i INNER JOIN 
        sys.index_columns AS ic ON  i.OBJECT_ID = ic.OBJECT_ID
                                AND i.index_id = ic.index_id INNER JOIN
        sys.columns c   ON  ic.object_id = c.object_id
                        AND ic.column_id = c.column_id
WHERE   i.is_primary_key = 1

尝试使用
sp\u help[tablename]
它将为您提供主键详细信息

sp_help [tablename]

或者,如果您只需要有关主键列的详细信息,请尝试使用Astander先生的回答

SELECT *
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE OBJECTPROPERTY(OBJECT_ID(constraint_name), 'IsPrimaryKey') = 1
AND table_name = 'TableName'

您可以检索主键信息并将其连接到information_SCHEMA.COLUMNS,并与其他列一起获取主键信息。请参见下面的查询

SELECT c.*,
       CASE WHEN keys.COLUMN_NAME IS NULL 
       THEN 0 
       ELSE 1 
       END AS is_primary  
FROM 
INFORMATION_SCHEMA.COLUMNS c
LEFT OUTER JOIN (
                SELECT col.COLUMN_NAME,col.TABLE_NAME
                FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS tab
                INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE Col 
                ON Col.Constraint_Name = tab.Constraint_Name
                AND Col.Table_Name = tab.Table_Name
                WHERE Constraint_Type = 'PRIMARY KEY') keys 
ON c.COLUMN_NAME=keys.COLUMN_NAME AND c.TABLE_NAME=keys.TABLE_NAME
ORDER BY c.TABLE_NAME
尝试:


它是唯一的get主列,另一个get all列包括info
name
type
primary key
类似于
SELECT*FROM INFORMATION\u SCHEMA.COLUMNS WHERE TABLE\u NAME='tablename'
但缺少
primary key
?但它只会给出关于哪个列有主键的详细信息。我是对的,但我需要在asp或php代码中使用它,并查询
sp\u help[tablename]
返回
数组([NAME]=>tablename[Owner]=>dbo[Type]=>user表[Created\u datetime]=>xxxx)
SELECT c.*,
       CASE WHEN keys.COLUMN_NAME IS NULL 
       THEN 0 
       ELSE 1 
       END AS is_primary  
FROM 
INFORMATION_SCHEMA.COLUMNS c
LEFT OUTER JOIN (
                SELECT col.COLUMN_NAME,col.TABLE_NAME
                FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS tab
                INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE Col 
                ON Col.Constraint_Name = tab.Constraint_Name
                AND Col.Table_Name = tab.Table_Name
                WHERE Constraint_Type = 'PRIMARY KEY') keys 
ON c.COLUMN_NAME=keys.COLUMN_NAME AND c.TABLE_NAME=keys.TABLE_NAME
ORDER BY c.TABLE_NAME
SELECT TC.TABLE_NAME, CU.CONSTRAINT_NAME, C.DATA_TYPE
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC
INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE CU
    ON TC.CONSTRAINT_NAME = CU.CONSTRAINT_NAME 
INNER JOIN INFORMATION_SCHEMA.COLUMNS C
    ON CU.TABLE_NAME = C.TABLE_NAME AND CU.TABLE_SCHEMA = C.TABLE_SCHEMA AND C.COLUMN_NAME = CU.COLUMN_NAME
WHERE TC.TABLE_NAME = 'tablename' AND CONSTRAINT_TYPE = 'PRIMARY KEY'