当名称与表名相同时,内联索引定义失败
Posted
技术标签:
【中文标题】当名称与表名相同时,内联索引定义失败【英文标题】:Inline index definition fails when name is the same as table name 【发布时间】:2019-06-04 17:53:03 【问题描述】:SQL Server 对象(即表和索引)有自己的命名空间。因此索引和表可以具有相同的名称(但这不是常见/良好的做法):
CREATE TABLE t(id INT PRIMARY KEY, col INT);
CREATE INDEX t ON t(col);
SELECT * FROM sys.tables WHERE name = 't';
SELECT * FROM sys.indexes WHERE name = 't';
db<>fiddle demo
很遗憾,我无法使用 inline index definition 创建相同的构造:
CREATE TABLE t(id INT PRIMARY KEY, col INT, INDEX t(col));
消息 2714 级别 16 状态 5 第 1 行
数据库中已经有一个名为“t”的对象。
-- below code is working correctly
CREATE TABLE t(id INT PRIMARY KEY, col INT, INDEX t1(col));
db<>fiddle demo 2
我错过了一些明显的东西还是一个错误?
【问题讨论】:
。 .这似乎是一个错误。当然,我倾向于将索引命名为“idx_我错过了一些明显的东西还是一个错误?
看起来像一个错误。
CREATE TABLE t(id INT PRIMARY KEY, col INT, INDEX t(col));
输出
Microsoft SQL Server 2017 (RTM-GDR) (KB4293803) - 14.0.2002.14 (X64)
Jul 21 2018 07:47:45
Copyright (C) 2017 Microsoft Corporation
Developer Edition (64-bit) on Windows 10 Enterprise 10.0 <X64> (Build 17763: ) (Hypervisor)
(1 row affected)
Msg 2714, Level 16, State 5, Line 4
There is already an object named 't' in the database.
Msg 1750, Level 16, State 1, Line 4
Could not create constraint or index. See previous errors.
请在此处添加反馈项:https://feedback.azure.com/forums/908035-sql-server 特别注意这是 SQL 2016 中的回归。
【讨论】:
从一开始就是我的意图,但首先我总是征求意见。我将创建一个案例并链接到这个问题。谢谢:) 供以后参考:feedback.azure.com/forums/908035-sql-server/suggestions/…以上是关于当名称与表名相同时,内联索引定义失败的主要内容,如果未能解决你的问题,请参考以下文章