Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 truncate и delete  [new]
2viper2viper
Member

Откуда:
Сообщений: 271
Столкнулся с ситуацией, когда в truncate отказывается удалять записи в связанных таблицах:
"Невозможно усечь таблицу "dbo.tb_sub", так как на нее ссылается ограничение FOREIGN KEY"
При этом смотрел зависимости - таблица, от которой зависит данная таблица, была успешно усечена. (таких ситуаций в схеме много, когда сообщение ссылается на связь с таблицей, которая уже пустая)

При этом, delete удаляет все записи без проблем

В чем причина такого поведения обеих операторов?
21 июл 15, 23:30    [17919337]     Ответить | Цитировать Сообщить модератору
 Re: truncate и delete  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1837
2viper2viper,

https://msdn.microsoft.com/ru-ru/library/ms177570(v=sql.120).aspx
21 июл 15, 23:35    [17919343]     Ответить | Цитировать Сообщить модератору
 Re: truncate и delete  [new]
2viper2viper
Member

Откуда:
Сообщений: 271
felix_ff, да, эту страницу и читал

То не обратил внимание на фразу:
"Если инструкция DELETE выполняется с блокировкой строк, для удаления блокируется каждая строка таблицы. Инструкция TRUNCATE TABLE всегда блокирует таблицу (включая блокировку схемы (SCH-M)) и страницу, но не каждую строку."

Может в этом причина такого поведения..
22 июл 15, 00:04    [17919397]     Ответить | Цитировать Сообщить модератору
 Re: truncate и delete  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
2viper2viper
felix_ff, да, эту страницу и читал

То не обратил внимание на фразу:
"Если инструкция DELETE выполняется с блокировкой строк, для удаления блокируется каждая строка таблицы. Инструкция TRUNCATE TABLE всегда блокирует таблицу (включая блокировку схемы (SCH-M)) и страницу, но не каждую строку."

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

И да, в следующий раз лучше читать всю статью, а не обращать внимание только на поравившиеся вам строки.

В хелпе русским по-белому написано:

Ограничения
Инструкцию TRUNCATE TABLE нельзя использовать для таблиц, для которых выполняются следующие условия:
На таблицу ссылается ограничение FOREIGN KEY.


Сообщение было отредактировано: 22 июл 15, 01:06
22 июл 15, 01:06    [17919469]     Ответить | Цитировать Сообщить модератору
 Re: truncate и delete  [new]
2viper2viper
Member

Откуда:
Сообщений: 271
Гавриленко Сергей Алексеевич, спасибо большое за
Ограничения
Инструкцию TRUNCATE TABLE нельзя использовать для таблиц, для которых выполняются следующие условия:
На таблицу ссылается ограничение FOREIGN KEY
22 июл 15, 12:15    [17920706]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить