Определение встроенного индекса завершается ошибкой, когда имя совпадает с именем таблицы - PullRequest
0 голосов
/ 10 января 2019

Объекты 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

К сожалению, я не могу создать такую ​​же конструкцию, используя определение встроенного индекса :

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

Я что-то упускаю из виду или это ошибка?

1 Ответ

0 голосов
/ 10 января 2019

Я что-то упускаю из виду или это ошибка?

Похоже, ошибка.

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.

...