c# - 如何获取表和主键,如果表没有主键则显示null?

标签 c# sql sql-server sql-server-2008 information-schema

我目前正在尝试通过在 C# 中调用以下 SQL 来检索每个表的表名和主键。到目前为止,这是我尝试过的:

SELECT t.TABLE_NAME As 'Table Name',
       Keys.COLUMN_NAME AS 'Primary Key'
FROM INFORMATION_SCHEMA.TABLES t 
left outer join INFORMATION_SCHEMA.TABLE_CONSTRAINTS Constraints
         on  t.TABLE_NAME = Constraints.Table_name 
         and t.Table_Schema = Constraints.Table_Schema 
left outer join INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS Keys 
         ON  Constraints.TABLE_NAME = Keys.TABLE_NAME 
         and Constraints.CONSTRAINT_NAME = Keys.CONSTRAINT_NAME 
         and Constraints.CONSTRAINT_TYPE = 'PRIMARY KEY'

问题是,如果表没有主键,我希望结果只包含一个“空”条目。虽然它正在工作,但出于某种原因,结果包含“薪水”表的副本,如下所示。 Salary 和 Employees 表都有主键,而“Test”表没有:

How can I get rid of the 3rd record?

编辑:我现在已经试过了,它似乎有效。这样做有什么缺点吗?

SELECT T.TABLE_NAME As 'Table Name'
    ,       (
            Select K1.COLUMN_NAME
            From INFORMATION_SCHEMA.TABLE_CONSTRAINTS As C1
                Join INFORMATION_SCHEMA.KEY_COLUMN_USAGE As K1
                    On C1.TABLE_SCHEMA = K1.TABLE_SCHEMA
                        And C1.TABLE_NAME = K1.TABLE_NAME 
                        And C1.CONSTRAINT_NAME = K1.CONSTRAINT_NAME 
            Where C1.CONSTRAINT_TYPE = 'PRIMARY KEY'
                And T.TABLE_SCHEMA = C1.TABLE_SCHEMA 
                And T.TABLE_NAME = C1.TABLE_NAME 
            )As PrimaryKeyColumns
FROM INFORMATION_SCHEMA.TABLES As T 

最佳答案

尝试替换此条件 Constraints.CONSTRAINT_TYPE = 'PRIMARY KEY' :

SELECT t.TABLE_NAME As 'Table Name',
       Keys.COLUMN_NAME AS 'Primary Key'
FROM INFORMATION_SCHEMA.TABLES t 
left outer join INFORMATION_SCHEMA.TABLE_CONSTRAINTS Constraints
         on  t.TABLE_NAME = Constraints.Table_name 
         and t.Table_Schema = Constraints.Table_Schema  
         and Constraints.CONSTRAINT_TYPE = 'PRIMARY KEY'       
left outer join INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS Keys 
         ON  Constraints.TABLE_NAME = Keys.TABLE_NAME 
         and Constraints.CONSTRAINT_NAME = Keys.CONSTRAINT_NAME 

关于c# - 如何获取表和主键,如果表没有主键则显示null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12357805/

相关文章:

c# - 重载方法——引用和实例化对象的区别

javascript - 如何将 javascript 值传递给 php?

sql - 在 t-sql 中枚举星期几

c# - 需要用异步数据库请求返回SqlDataReader

SQL Server 2008 : Decimal column in where clause decimal part effects query speed

c# - 我在哪里可以找到 .NET 框架包装的所有 "COR_E_"HRESULT 的引用?

c# - Page_Load 事件中的表单例份验证

c# - 如何从 C# 中的 CultureTypes 对象获取对值?

mysql - 内连接 SQL ORDER BY 不起作用

sql-server - SSIS 表达式生成器的转义字符是什么?