У меня много проблем с добавлением простого ограничения внешнего ключа во вновь созданную пустую таблицу.Справочная таблица - крошечная, в которой содержится менее 40 записей, но на нее ссылаются довольно редко.
Вот что происходит: новая таблица создается успешно, но при добавлении ограничения FK она «думает» оочень долго и увеличивает нагрузку на процессор.Использование памяти увеличивается, сервер начинает пейджинг как сумасшедший и перестает отвечать на запросы (время ожидания соединения).Отмена запроса не помогает.Единственное, что работает, это перезагрузка сервера, что очень дорого.
Вот скрипт, который я пытаюсь запустить.Я надеюсь, что гуру SQL-сервера могут помочь.Thx!
USE [my_db]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[MyNewTable](
[Column1ID] [int] NOT NULL,
[Column2ID] [int] NOT NULL
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[MyNewTable] WITH CHECK ADD CONSTRAINT [FK_MyNewTable_Column1ID] FOREIGN KEY([Column1ID])
REFERENCES [dbo].[ReferenceTable] ([Column1ID])
ON UPDATE CASCADE
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[MyNewTable] CHECK CONSTRAINT [FK_MyNewTable_Column1ID]
GO
EDIT: ReferenceTable - это небольшая таблица, которая выглядит примерно так:
[Column1ID] [int] IDENTITY(1,1) NOT NULL,
[TxtCol1] [varchar](50) NOT NULL,
[TxtCol2] [varchar](50) NOT NULL,
[TxtCol3] [varchar](200) NOT NULL,
[TxtCol4] [nvarchar](2000) NOT NULL,
[TxtCol5] [varchar](200) NOT NULL,
[BitCol1] [bit] NOT NULL,
[TxtCol6] [varchar](200) NOT NULL,
[NumCol1] [smallint] NOT NULL,
[ExternalColumnId] [int] NOT NULL,
[NumCol2] [int] NOT NULL
На Column1ID часто ссылаются другие таблицы (FK).ExternalColumnId - это FK для другой таблицы.Проблема возникает во время одного из вызовов ALTER TABLE.К сожалению, оба из них были запущены вместе, поэтому я не могу сказать, какая из них вызвала.
РЕДАКТИРОВАТЬ: Как только БД переходит в режим «мышления», можно восстановить его, переключивэто в одиночный режим, а затем обратно в многопользовательский режим.Это намного лучше, чем перезагрузка сервера, но все же недопустимо.