Усечение таблицы MS SQL Server Express с одной записью занимает вечность - PullRequest
0 голосов
/ 01 марта 2020

Я настраиваю своего рода тестовую базу данных в Microsoft SQL Сервер Express 2017. У меня есть одна главная таблица с 10 столбцами, которая связана с 6 другими, ie ее первичный ключ - внешний ключ 6 других таблиц.

Я заполнил эту основную таблицу одной записью.

Мне нужно ее обрезать - ie удалить все строки, но не таблицу. Я пробовал и truncate table, и delete from, но оба продолжались вечно: через 4 минуты запрос все еще выполнялся! Я понимаю, что есть ключи для проверки et c, но это только одна запись. Все остальные таблицы пусты. Это не кажется правильным. Есть идеи, что может быть не так и что я могу сделать, чтобы это исправить?

Ответы [ 2 ]

1 голос
/ 04 марта 2020

В ответ на комментарий

Вероятно, это непринятые транзакции в ваших дочерних таблицах.

Сначала вы должны удалить все дочерние записи перед удалением записи родительской таблицы. Все ли дочерние таблицы пусты?

Есть ли у вас какие-либо незафиксированные транзакции в любой из этих таблиц? Если вы это сделаете, попытайтесь убить эти сеансы, задействовав dba

0 голосов
/ 01 марта 2020

Таблица с ограничениями внешнего ключа не может быть усечена. Либо вы удаляете ограничение, усекаете таблицу, затем заново создаете ограничения или используете каскад удаления. Вот ссылка для того же.

TRUNCATE TABLE - это команда DDL, она не может проверить, ссылаются ли записи в таблице на запись в дочерней таблице. В случае удаления, база данных может убедиться, что на нее не ссылается другая запись.

...