Копировать ссылку на страницу Перейти в предыдущий раздел Перейти в следующий раздел

При конвертации на Modern-конфигурацию серверной части пересоздайте таблицы, в которых планируется использовать фильтрованные индексы:

1.В контекстном меню базы данных выберите пункты Tasks\Generate Scripts…. Откроется мастер действий Generate and Publish Scripts.
2.На закладке Choose Objects выберите исходную таблицу, например, SBFolder, и нажмите на кнопку Next >.
3.На закладке Set Scripting Options выберите переключатель Save to query window и нажмите на кнопку Advanced. Откроется окно Advanced Scripting Options.
4.В разделе Table/View Options установите значение True для настроек:
Script Check Constraints
Script Foreign Keys
Script Full-Text Indexes
Script Indexes
Script Primary Keys
Script Triggers
Script Unique Keys
Script Object-Level Permissions

Нажмите на кнопку OK.

Примечание

В базах данных, развернутых на SQL Server 2012 и ниже с уровнем совместимости ниже 100, установите значение False для настройки Script Full-Text Indexes, т.к. SQL Server Management Studio не всегда корректно формирует скрипт для создания полнотекстового индекса. Подробнее см. в документации Microsoft. После пересоздания таблицы выполните сценарий Индексирование текстов и слепков объектов.

5.Нажмите на кнопку Next >.
6.Проверьте значение параметра соединения SET ANSI_NULLS ON.
7.В инструкции CREATE TABLE:
замените название таблицы на временное, например, «SBFolder_»;
замените названия ключей на временные:

 

CREATE TABLE [dbo].[SBFolder_](
  [Name] [varchar](255) NOT NULL,
  [Author] [int] NOT NULL,
  [CreateDate] [datetime] NOT NULL,
  [EditDate] [datetime] NOT NULL,
  [Kind] [varchar](1) NOT NULL,
  [FolderType] [varchar](1) NOT NULL,
  [Note] [varchar](255) NULL,
  [XRecID] [int] NOT NULL,
  [SearchDescription] [image] NULL,
  [URL] [varchar](2048) NULL,
  [ShowUnread] [varchar](1) NOT NULL,
  [ShowCoverOnly] [varchar](1) NOT NULL,
  [timestamp] [timestamp] NOT NULL,
  [ManagedFolderID] [int] NULL,
CONSTRAINT [SBFolder_PK_] PRIMARY KEY NONCLUSTERED
([XRecID] ASC) WITH
(PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
 ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 95) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

 

8.Замените названия индексов в инструкциях CREATE <UNIQUE> <CLUSTERED> INDEX на временное название для новой таблицы:

 

CREATE UNIQUE CLUSTERED INDEX [SBFolder_Author_Idx_] ON [dbo].[SBFolder_]
([Author] ASC,
[FolderType] ASC,
[XRecID] ASC
) WITH
(PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF,
 IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF,
 ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80)
ON [PRIMARY]

 

9.Если используется инструкция CREATE FULLTEXT INDEX ON, то перед ней удалите индекс полнотекстового поиска у исходной таблицы, иначе возникнет ошибка в методе Switch to:

 

if exists (
  select
     1
  from
     sys.tables tbl
    join sys.fulltext_indexes fti on
       fti.object_id = tbl.object_id
  where
     tbl.object_id = object_id('SBFolder'))
drop fulltext index on [dbo].[SBFolder]

 

10.После создания индексов и до инструкций ALTER TABLE добавьте скрипт переключения данных:

 

alter table [dbo].[SBFolder] switch to [dbo].[SBFolder_]
go

11.Добавьте скрипт перестроения счетчика идентификатора:

 

if ident_current(N'SBFolder') is not null
 dbcc checkident(N'SBFolder_')
go

12.Добавьте скрипт удаления исходной таблицы:

 

drop table [dbo].[SBFolder]
go

13.Добавьте скрипт переименования новой таблицы в исходную:

 

execute sp_rename N'SBFolder_', N'SBFolder', N'object'
go

14.Если были ключи или индексы переименуйте их как у исходной таблицы:

 

execute sp_rename N'SBFolder.SBFolder_PK_', N'SBFolder_PK', N'INDEX'
execute sp_rename N'SBFolder.SBFolder_Author_Idx_', N'SBFolder_Author_Idx', N'INDEX'
go

15.Добавьте инструкции создания ограничений, полнотекстовых индексов, триггеров, добавления расширенных свойств:

 

CREATE FULLTEXT INDEX ON [dbo].[SBFolder](
[Name] LANGUAGE [Neutral])
KEY INDEX [SBFolder_PK]ON ([MBText_text], FILEGROUP [PRIMARY])
WITH (CHANGE_TRACKING = AUTO, STOPLIST = SYSTEM)
ALTER TABLE [dbo].[SBFolder] ADD CONSTRAINT [SBFolder_D_ShowUnread] DEFAULT ('N') FOR [ShowUnread]
ALTER TABLE [dbo].[SBFolder] ADD CONSTRAINT [SBFolder_D_ShowCoverOnly] DEFAULT ('N') FOR [ShowCoverOnly]
ALTER TABLE [dbo].[SBFolder] WITH NOCHECK ADD CONSTRAINT [SBFolder_C_FolderType] CHECK (([FolderType]='I' OR ([FolderType]='O' OR ([FolderType]='F' OR ([FolderType]='C' OR ([FolderType]='P' OR ([FolderType]='M' OR ([FolderType]='Q' OR ([FolderType]='S' OR [FolderType]='E')))))))))
ALTER TABLE [dbo].[SBFolder] CHECK CONSTRAINT [SBFolder_C_FolderType]
ALTER TABLE [dbo].[SBFolder] WITH NOCHECK ADD CONSTRAINT [SBFolder_C_Kind] CHECK (([Kind]='E' OR ([Kind]='T' OR ([Kind]='J' OR ([Kind]='C' OR [Kind]='A')))))
ALTER TABLE [dbo].[SBFolder] CHECK CONSTRAINT [SBFolder_C_Kind]
go

16.Выполните скрипт и убедитесь, что в свойствах таблицы параметр соединения ANSI_NULLS имеет значение ON.
© Компания DIRECTUM, 2018 Сообщество пользователей DIRECTUM
.navbar > a:hover { background: #FFD73B; }