В нашей базе данных имеется около 1000 таблиц, ссылающихся на таблицу: FAMILIES.Когда мы пытаемся удалить запись из FAMILIES, мы видим ошибку ниже:
Msg 8621, Уровень 17, Состояние 1, Строка 81 В процессе оптимизации запроса процессору запросов не хватило места в стеке.Пожалуйста, упростите запрос.
Я заметил, что мы можем воспроизвести эту проблему, если таблица имеет более 918 внешних ограничений, ссылающихся на таблицу.Ниже приведен код для воспроизведения ошибки.
Ниже код: Создает таблицу FAMILIES. Вставка образцов записей. Создайте таблицы, ссылающиеся на FAMILIES (@tbl_count - количество создаваемых таблиц).меньше, код работает нормально.
- Какое максимальное количество любых ограничений (или ссылок на внешний ключ) может иметь таблица?
- Если существует более 1000 таблиц, ссылающихся на таблицу, есть ли способ исправить ошибку?
Эта проблема воспроизводима в SQL Server 2012 и 2014, но отлично работает в 2016 году. Я работаю на Windows10.
BEGIN TRANSACTION
CREATE TABLE families (fmly_key BIGINT, PRIMARY KEY (fmly_key))
INSERT INTO families VALUES (10)
DECLARE @v_count BIGINT = 0, @sql_stmt NVARCHAR(MAX), @tbl_count BIGINT = 919
WHILE @v_count < @tbl_count
BEGIN
SET @v_count = @v_count + 1
SET @sql_stmt = 'CREATE TABLE TABLE'+cast(@v_count as nvarchar(max))+' (COL1 BIGINT, FOREIGN KEY (COL1) REFERENCES FAMILIES (FMLY_KEY))'
exec sp_executesql @sql_stmt
END
DELETE FROM families WHERE fmly_key = 10
ROLLBACK TRANSACTION