Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何获取SQL Server数据库的完整元数据_Sql Server - Fatal编程技术网

Sql server 如何获取SQL Server数据库的完整元数据

Sql server 如何获取SQL Server数据库的完整元数据,sql-server,Sql Server,我需要在SQLServer中获取数据库中每个表的完整元数据 当我使用 SELECT * FROM INFORMATION_SCHEMA.COLUMNS 我没有得到PK和FK信息。如何获取PK和FK信息以及其他元数据列?您需要它作为查询(SQL的特定需要),还是从正在编写的应用程序(如C#)中访问数据?信息模式中有更多对象。你也需要使用它们。如果你能解释你想用这些信息做什么,我们可以为你指出正确的方向。如前所述,您需要什么并不清楚。请看一看:谢谢@M.Hassan。它帮助我构建了完整的查询。

我需要在SQLServer中获取数据库中每个表的完整元数据

当我使用

SELECT * 
FROM INFORMATION_SCHEMA.COLUMNS

我没有得到PK和FK信息。如何获取PK和FK信息以及其他元数据列?

您需要它作为查询(SQL的特定需要),还是从正在编写的应用程序(如C#)中访问数据?信息模式中有更多对象。你也需要使用它们。如果你能解释你想用这些信息做什么,我们可以为你指出正确的方向。如前所述,您需要什么并不清楚。请看一看:谢谢@M.Hassan。它帮助我构建了完整的查询。
SELECT c.* --c.TABLE_NAME, c.COLUMN_NAME,c.DATA_TYPE,  c.is_nullable
             ,CASE WHEN pk.COLUMN_NAME IS NOT NULL THEN 'PRIMARY KEY' ELSE '' END AS KeyType
             ,CASE WHEN fk.COLUMN_NAME IS NOT NULL THEN 'FOREIGN KEY' ELSE '' END AS KeyType,x1.ReferenceTableName
             ,x1.ReferenceColumnName
FROM INFORMATION_SCHEMA.COLUMNS c
LEFT JOIN (
            SELECT ku.TABLE_CATALOG,ku.TABLE_SCHEMA,ku.TABLE_NAME,ku.COLUMN_NAME
            FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS tc
            INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS ku
                ON tc.CONSTRAINT_TYPE = 'PRIMARY KEY'
                AND tc.CONSTRAINT_NAME = ku.CONSTRAINT_NAME
         )   pk
        ON  c.TABLE_CATALOG = pk.TABLE_CATALOG
            AND c.TABLE_SCHEMA = pk.TABLE_SCHEMA
            AND c.TABLE_NAME = pk.TABLE_NAME
            AND c.COLUMN_NAME = pk.COLUMN_NAME 
LEFT JOIN (
            SELECT ku.TABLE_CATALOG,ku.TABLE_SCHEMA,ku.TABLE_NAME,ku.COLUMN_NAME
            FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS tc
            INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS ku
                ON tc.CONSTRAINT_TYPE = 'FOREIGN KEY'
                AND tc.CONSTRAINT_NAME = ku.CONSTRAINT_NAME
         )   fk
        ON  c.TABLE_CATALOG = fk.TABLE_CATALOG
            AND c.TABLE_SCHEMA = fk.TABLE_SCHEMA
            AND c.TABLE_NAME = fk.TABLE_NAME
            AND c.COLUMN_NAME = fk.COLUMN_NAME
LEFT JOIN(
SELECT f.name AS ForeignKey,
SCHEMA_NAME(f.SCHEMA_ID) SchemaName,
OBJECT_NAME(f.parent_object_id) AS TableName,
COL_NAME(fc.parent_object_id,fc.parent_column_id) AS ColumnName,
SCHEMA_NAME(o.SCHEMA_ID) ReferenceSchemaName,
OBJECT_NAME (f.referenced_object_id) AS ReferenceTableName,
COL_NAME(fc.referenced_object_id,fc.referenced_column_id) AS ReferenceColumnName
FROM sys.foreign_keys AS f
INNER JOIN sys.foreign_key_columns AS fc ON f.OBJECT_ID = fc.constraint_object_id
INNER JOIN sys.objects AS o ON o.OBJECT_ID = fc.referenced_object_id) x1
ON  c.TABLE_NAME = x1.TableName
AND c.COLUMN_NAME = x1.ColumnName
ORDER BY c.TABLE_NAME, c.ORDINAL_POSITION