0

需要用数据库中的所有表填充数据集,并且每个数据表必须具有以下列

  • 表名
  • 列名
  • 可空,
  • 数据类型
  • 最长长度
  • 主键
  • 是外键

我已经完成了以下操作,但这并没有给我主键和外键

SELECT *
FROM INFORMATION_SCHEMA.COLUMNS C      
WHERE C.TABLE_SCHEMA='dbo' 
ORDER BY C.TABLE_NAME

试图添加一个关节,但我得到了错误的结果

SELECT C.TABLE_SCHEMA,
    C.TABLE_NAME,
    C.COLUMN_NAME,
    C.IS_NULLABLE,
    C.DATA_TYPE,
    C.CHARACTER_MAXIMUM_LENGTH,
    TC.CONSTRAINT_TYPE
FROM INFORMATION_SCHEMA.COLUMNS C
    INNER JOIN  INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC 
        ON c.TABLE_NAME=TC.TABLE_NAME
WHERE C.TABLE_SCHEMA='dbo' 
ORDER BY C.TABLE_NAME

如何返回上面关于表的所有信息,包括 if 是外键的主要信息?

非常感谢

4

1 回答 1

0

如果我说对了,那么:

1.你需要做LEFT join INFORMATION_SCHEMA.TABLE_CONSTRAINTS

2.把case

试试下面的查询,让我知道我是否正确?

SELECT 
Distinct
C.TABLE_SCHEMA,
C.TABLE_NAME,
C.COLUMN_NAME,
C.IS_NULLABLE,
C.DATA_TYPE,
C.CHARACTER_MAXIMUM_LENGTH,
CASE WHEN TC.CONSTRAINT_TYPE='PRIMARY KEY' THEN 'Yes' Else 'No' end as ISprimaryKey,
CASE WHEN TC.CONSTRAINT_TYPE='FOREIGN KEY' THEN 'Yes' Else 'No' end as IsForeignKey
FROM INFORMATION_SCHEMA.COLUMNS C with(nolock)
LEFT join  INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC with(nolock) on c.TABLE_NAME=TC.TABLE_NAME
WHERE C.TABLE_SCHEMA='dbo' 
ORDER BY C.TABLE_NAME
于 2013-05-31T08:25:51.140 回答