简体   繁体   English

当表只有FK时无法返回列表?

[英]Can't return column table when the table have just FK?

When I choose a table when it doesn't have any Primary Key , my query returns nothing.当我选择一个没有任何Primary Key的表时,我的查询不返回任何内容。 So what's the problem in this query?那么这个查询有什么问题呢?

This is result when I have pk in my table:这是当我的表中有pk时的结果:

在此处输入图片说明

And this is result when I haven't pk in my table:这是当我没有在我的表中pk时的结果:

在此处输入图片说明

Here is the query:这是查询:

select 
    col.name as [Nom de Colone],
        typ.DATA_TYPE + CASE WHEN typ.DATA_TYPE IN('char', 'nchar', 'varchar', 'nvarchar', 'binary', 'varbinary')AND typ.CHARACTER_MAXIMUM_LENGTH > 0 THEN COALESCE('(' + 
        CONVERT(varchar, typ.CHARACTER_MAXIMUM_LENGTH) + ')','') ELSE '' END + CASE WHEN typ.DATA_TYPE IN('decimal', 'numeric') THEN COALESCE('(' + CONVERT(varchar, typ.NUMERIC_PRECISION) + ',' + CONVERT(varchar, typ.NUMERIC_SCALE) + ')','') 
    ELSE '' END AS [Type],
    CASE WHEN col.IS_NULLABLE = 0 THEN 'NOT ' ELSE '' END + 'NULL' AS Valeur,
    case when KU.COLUMN_NAME=col.name then cast(1 as bit) else cast(0 as bit) end as [PK],
    case when fk.object_id is not null then cast(1 as bit) else cast(0 as bit) end as [fk],
    case when pk_tab.name is not null then pk_tab.name else ''end as [Ref_Tab_FK],
    case when pk_col.name is not null then pk_col.name else ''end as [Ref_Col_FK]
from sys.tables tab 
    inner join sys.columns col  
        on col.object_id = tab.object_id 
    left outer join sys.foreign_key_columns fk_cols 
        on fk_cols.parent_object_id = tab.object_id and fk_cols.parent_column_id = col.column_id
    left outer join sys.foreign_keys fk  
        on fk.object_id = fk_cols.constraint_object_id left outer join sys.tables pk_tab 
        on pk_tab.object_id = fk_cols.referenced_object_id 
    left outer join sys.columns pk_col
        on pk_col.column_id = fk_cols.referenced_column_id and pk_col.object_id = fk_cols.referenced_object_id 
    inner join INFORMATION_SCHEMA.COLUMNS typ 
        on typ.COLUMN_NAME=col.name and tab.name=typ.TABLE_NAME 
    inner join INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS TC 
    on tc.TABLE_NAME=typ.TABLE_NAME and TC.CONSTRAINT_TYPE = 'PRIMARY KEY'
    INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS KU
        ON TC.CONSTRAINT_TYPE = 'PRIMARY KEY'
        AND TC.CONSTRAINT_NAME = KU.CONSTRAINT_NAME     
where tab.name='TABLE_NAME' 
order by col.column_id

As you are putting INNER JOIN with PRIMARY KEY constraint, as given below, only the tables with PRIMARY KEY are returned in the result set.当您将INNER JOIN与 PRIMARY KEY 约束一起放置时,如下所示,结果集中仅返回具有 PRIMARY KEY 的表。

    inner join INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS TC 
    on tc.TABLE_NAME=typ.TABLE_NAME and TC.CONSTRAINT_TYPE = 'PRIMARY KEY'
    INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS KU
        ON TC.CONSTRAINT_TYPE = 'PRIMARY KEY'
        AND TC.CONSTRAINT_NAME = KU.CONSTRAINT_NAME     

If you change them to LEFT OUTER JOIN , you will get tables without PRIMARY KEY and just FOREIGN KEY also如果您将它们更改为LEFT OUTER JOIN ,您将获得没有 PRIMARY KEY 并且只有 FOREIGN KEY 的表

    LEFT OUTER join INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS TC 
    on tc.TABLE_NAME=typ.TABLE_NAME and TC.CONSTRAINT_TYPE = 'PRIMARY KEY'
    LEFT OUTER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS KU
        ON TC.CONSTRAINT_TYPE = 'PRIMARY KEY'
        AND TC.CONSTRAINT_NAME = KU.CONSTRAINT_NAME  

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何在一个表中使用另一个表中的FK填充我的FK列? - How can I populate my FK column in one table with the FK from another table? 从Bill表向我的客户表添加了FK,无法向fk列添加数据 - Added a FK to my customer table from Bill table, can not add data to fk column 如果桌子有独特的FK,那么它应该有PK吗? - Should a table have a PK when it has a unique FK? 无法将值分配给表中刚创建的列 - Can't assign value to column that was just created in table Spring jpa 无法删除实体,因为表有 fk - Spring jpa can't delete entity because a table has fk to it 没有标识列的表,但此列不能有重复值 - Table without a identity column but this column can't have repeated values sql从一个表中删除并比较数据另一个表都没有PK,FK关系 - sql deleat from one table with compare data another table both don't have PK,FK relation 将表与也是PK的FK建立1对1关系是正确的吗? - Is correct have a table in a 1 to 1 relationship with a FK that is also a PK? 我可以选择另一个表中与该表中的 FK 具有相同值的行数吗? - Can I select the count of rows in another table that have the same value as the FK in that table? 到主表的表是FK的三倍-错误 - Have table be a FK three times to main table - error
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM