SQL Server: максимальное количество ограничений, ссылающихся на таблицу - PullRequest
1 голос
/ 07 мая 2019

В нашей базе данных имеется около 1000 таблиц, ссылающихся на таблицу: FAMILIES.Когда мы пытаемся удалить запись из FAMILIES, мы видим ошибку ниже:

Msg 8621, Уровень 17, Состояние 1, Строка 81 В процессе оптимизации запроса процессору запросов не хватило места в стеке.Пожалуйста, упростите запрос.

Я заметил, что мы можем воспроизвести эту проблему, если таблица имеет более 918 внешних ограничений, ссылающихся на таблицу.Ниже приведен код для воспроизведения ошибки.

Ниже код: Создает таблицу FAMILIES. Вставка образцов записей. Создайте таблицы, ссылающиеся на FAMILIES (@tbl_count - количество создаваемых таблиц).меньше, код работает нормально.

  1. Какое максимальное количество любых ограничений (или ссылок на внешний ключ) может иметь таблица?
  2. Если существует более 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

1 Ответ

4 голосов
/ 07 мая 2019

Поддерживаемые ограничения были отменены в SQL 2016. См.

фактическое количество ограничений FOREIGN KEY, которые могут быть используемый ограничен конфигурацией оборудования и конструкцией база данных и приложение. Мы рекомендуем, чтобы таблица не содержала больше чем 253 ограничения FOREIGN KEY, и что на него ссылаются не более чем 253 ограничения FOREIGN KEY.

https://docs.microsoft.com/en-us/sql/relational-databases/tables/create-foreign-key-relationships?view=sql-server-2014

SQL Server 2016 (13.x) увеличивает ограничение на количество других таблица и столбцы, которые могут ссылаться на столбцы в одной таблице (входящие ссылки), от 253 до 10000.

https://docs.microsoft.com/en-us/sql/relational-databases/tables/create-foreign-key-relationships?view=sql-server-2016

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