Автоматические изменения индекса SQL Server (фильтр моего индекса пропал) - PullRequest
0 голосов
/ 07 мая 2018

Я использую SQL Server 2008

Я знаю, что индекс в представлении будет удален без ущерба и предупреждения, если вы измените определение представления. Мне интересно, есть ли другие известные аналогичные автоматические изменения индексов, и если да, то где я могу прочитать о них?

Моя ситуация:

  • У меня был уникальный некластеризованный отфильтрованный индекс для таблицы.
  • Столбцы ключа индекса совпадают с первичным ключом таблицы.
  • Включен только один другой столбец.
  • Сегодня я, когда дела шли медленно, понял, что фильтра сейчас нет.
  • Один из типов столбцов первичного ключа был недавно изменен на другой тип. Поэтому я предполагаю, что это могло произойти, когда произошло удаление фильтра, но я не могу найти подтверждение этому нигде.
  • Если это поможет, я не смог бы просто добавить фильтр обратно, потому что при попытке воссоздать «Новое определение индекса не соответствует ограничению, наложенному существующим индексом».
  • Также я не могу просто отбросить индекс, чтобы воссоздать его, потому что , по-видимому, SQL Server решил использовать индекс для применения ограничений внешнего ключа вместо кластерного индекса PK. Мне придется удалить ограничения внешнего ключа, прежде чем я это сделаю.

Все наши разработчики сказали, что они не связались с индексом. Один из нас может быть забывчивым. Или врать. Или кто-то, возможно, что-то изменил и не очень внимательно прочитал предупреждающие сообщения. Я не знаю, может ли это быть чем-то автоматическим, поэтому я надеюсь, что вы, ребята, можете сообщить мне.

Спасибо!

1 Ответ

0 голосов
/ 07 мая 2018

Я думаю, кто-то ловит рыбу :) Вот тестовый код, который показывает, что вы не можете изменить тип данных столбца PK без , сначала не удалив индексы:

create table dbo.worker
(
    id int identity not null constraint PK_worker primary key,
    name varchar(100) not null
);

-- Filtered index based in PK's primary index
create nonclustered index ix_worker
on dbo.worker (id)
where id < 3;

-- Try to change PK's column data type...
alter table dbo.worker
    alter column id bigint;

SQL Server генерирует следующие ошибки:

Сообщение 5074, Уровень 16, Состояние 1,

Строка 8 Индекс 'ix_worker' зависит от столбца 'id'.

Сообщение 5074, Уровень 16, Состояние 1, Строка 8

Объект 'PK_worker' зависит от столбца 'id'.

Сообщение 5074, Уровень 16, Состояние 1, Строка 8

Индекс 'ix_worker' зависит от столбца 'id'.

Сообщение 4922, Уровень 16, Состояние 9, Строка 8

Ошибка ALTER TABLE ALTER COLUMN id, поскольку один или несколько объектов обращаются к этому столбцу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...