Почему в скриптах, создаваемых SSMS, отсутствуют индексы?

SSMS 17.4, выпуск SQL Server 2017 для разработчиков на Win10 1709

Я установил пример базы данных WorldWideImporters. Одна из таблиц, Sales.Customers, имеет несколько внешних ключей и несколько индексов внешних ключей. При создании сценария таблицы (Script Table, CREATE To…) сценарий включает внешние ключи, но не индексы внешнего ключа. Если я просто изменяю имя таблицы и запускаю сгенерированный скрипт, таблица создается со всеми ограничениями FK, но без индексов FK.

Что-то, что вы можете увидеть, даже если у вас нет образца WWI, я сделал это.

CREATE TABLE bar (
  bar_id int,
  col1 varchar(20),
  CONSTRAINT pk_bar PRIMARY KEY CLUSTERED (bar_id)
)
CREATE TABLE foo (
  foo_id int,
  foobar_id int,
  col1 varchar(20),
  CONSTRAINT pk_foo PRIMARY KEY CLUSTERED (foo_id)
)
ALTER TABLE foo WITH CHECK
  ADD CONSTRAINT FK_bar FOREIGN KEY (foobar_id) REFERENCES bar (bar_id)
ALTER TABLE foo CHECK CONSTRAINT FK_bar

Это создает две таблицы с foo, имеющим ограничение FK на bar. Затем я написал скрипт из SSMS.

CREATE TABLE [dbo].[foo](
    [foo_id] [int] NOT NULL,
    [foobar_id] [int] NULL,
    [col1] [varchar](20) NULL,
 CONSTRAINT [pk_foo] PRIMARY KEY CLUSTERED 
(
    [foo_id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,     ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [USERDATA]
) ON [USERDATA]
GO

ALTER TABLE [dbo].[foo]  WITH CHECK ADD  CONSTRAINT [FK_bar] FOREIGN     KEY([foobar_id])
REFERENCES [dbo].[bar] ([bar_id])
GO

ALTER TABLE [dbo].[foo] CHECK CONSTRAINT [FK_bar]
GO

Все идет нормально.

Но затем я добавил индекс foo в столбец FK.

CREATE NONCLUSTERED INDEX FK_bar ON foo (foobar_id)

Создание сценария для таблицы приводит к тому же сценарию, что и выше. Таким образом, SSMS создает один и тот же сценарий независимо от того, есть индекс в столбце FK или нет. (Я подтвердил с помощью sp_helpindex, что индекс FK действительно существует.)

Это ошибка в SSMS или я что-то неправильно понимаю?

1 ответ

Решение

Сценарии индекса отключены по умолчанию в SSMS. Лично это одна из первых вещей, которую я снова включаю вместе с разрешениями и триггерами сценариев. Вы можете найти эту настройку:

  1. В SSMS откройте меню "Сервис" и выберите "Параметры".
  2. Прокрутите вниз до Проводника объектов SQL Server и раскройте дерево
  3. Нажмите на узел Scripting и измените индексы скрипта на true
Другие вопросы по тегам