gpt4 book ai didi

sql-server - REFERENTIAL_CONSTRAINTS 中 UNIQUE_CONSTRAINT_NAME 的值不正确

转载 作者:行者123 更新时间:2023-12-04 00:48:46 26 4
gpt4 key购买 nike

我使用 INFORMATION_SCHEMA View 集和以下查询列出给定表的所有 FK 约束:

SELECT      X.UNIQUE_CONSTRAINT_NAME,
"C".*, "X".*
FROM "INFORMATION_SCHEMA"."KEY_COLUMN_USAGE" AS "C"
INNER JOIN "INFORMATION_SCHEMA"."REFERENTIAL_CONSTRAINTS" AS "X"
ON "C"."CONSTRAINT_NAME" = "X"."CONSTRAINT_NAME"
AND "C"."TABLE_NAME" = 'MY_TABLE'
AND "C"."TABLE_SCHEMA" = 'MY_SCHEMA'

一切都运行良好,但对于一个特定的约束,UNIQUE_CONSTRAINT_NAME 列的值是错误的,我需要它以便从引用的列中找到更多信息。基本上,对于大多数行,UNIQUE_CONSTRAINT_NAME 包含引用表中唯一约束(或 PK)的名称,但对于一个特定的 FK,它是某些行的名称其他唯一约束。

我删除并重新创建了 FK - 没有帮助。

我的假设是元数据不知何故被搞砸了。有没有一种方法可以重建元数据,以便 INFORMATION_SCHEMA View 实际显示正确的数据?

edit-1:示例数据库结构

CREATE TABLE MY_PARENT_TABLE (
ID INTEGER,
NAME VARCHAR,
--//...

CONSTRAINT MY_PARENT_TABLE_PK PRIMARY KEY CLUSTERED (ID)
)

CREATE UNIQUE NONCLUSTERED INDEX MY_PARENT_TABLE_u_nci_ID_LongName ON MY_PARENT_TABLE (ID ASC) INCLUDE (SOME_OTHER_COLUMN)

CREATE TABLE MY_CHILD_TABLE (
ID INTEGER,
PID INTEGER,
NAME VARCHAR,

CONSTRAINT MY_CHILD_TABLE_PK PRIMARY KEY CLUSTERED (ID)
,CONSTRAINT MY_CHILD_TABLE__MY_PARENT_TABLE__FK
FOREIGN KEY (PID)
REFERENCES MY_PARENT_TABLE (ID)
ON UPDATE NO ACTION
ON DELETE NO ACTION
)

我希望 UNIQUE_CONSTRAINT_NAMEMY_PARENT_TABLE_PK,但我是得到的是 MY_PARENT_TABLE_u_nci_ID_LongName

查看结构后,我发现该列实际上有 2 个 UNIQUE 约束 - PKMY_PARENT_TABLE_u_nci_ID_LongName。所以真正的问题可能应该是:为什么它采用其他一些唯一索引而不是 PK?

最佳答案

由于您在同一列上同时具有 PK 和 UNIQUE 约束,因此 SQL Server 会选择一个来使用。我不知道它是否选择了 UNIQUE 约束,因为它更薄(即涉及的列更少)并且可能需要更少的读取来确认匹配(?)

我看不到 SQL 中有任何方法可以强制选择它,除了对脚本进行排序 - 使用 PK 创建表,创建另一个表和 FK,然后在确实需要时创建 UNIQUE 约束- 但事实真的如此吗?

关于sql-server - REFERENTIAL_CONSTRAINTS 中 UNIQUE_CONSTRAINT_NAME 的值不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3005962/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com