Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 TRUNCATE TABLE dbo.T1 CONTINUE IDENTITY;  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
Standard SQL has an identity column restart option which controls whether to restart or continue the identity value. Would be nice to see it in SQL Server:

Add the standard <identity column restart option> to the TRUNCATE statement in SQL Server:

14.10 <truncate table statement> Function
Delete all rows of a base table without causing any triggered action.
Format
<truncate table statement> ::= TRUNCATE TABLE <target table> [ <identity column restart option> ]
<identity column restart option> ::= CONTINUE IDENTITY | RESTART IDENTITY


https://connect.microsoft.com/SQLServer/feedback/details/2748210
26 май 16, 09:40    [19221358]     Ответить | Цитировать Сообщить модератору
 Re: TRUNCATE TABLE dbo.T1 CONTINUE IDENTITY;  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Knyazev Alexey,

SEQUENCE не решает этого?
26 май 16, 09:49    [19221396]     Ответить | Цитировать Сообщить модератору
 Re: TRUNCATE TABLE dbo.T1 CONTINUE IDENTITY;  [new]
Jovanny
Member

Откуда:
Сообщений: 1195
Knyazev Alexey,

+1
26 май 16, 10:02    [19221456]     Ответить | Цитировать Сообщить модератору
 Re: TRUNCATE TABLE dbo.T1 CONTINUE IDENTITY;  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
TaPaK
SEQUENCE не решает этого?


зачем мне SEQUENCE? у меня таблицы с identity, и не хочу я транкейтом сбрасывать счётчик...не хочу запоминать текущее значение перед транкейтом и присваивать его "руками" после чистки
26 май 16, 10:13    [19221521]     Ответить | Цитировать Сообщить модератору
 Re: TRUNCATE TABLE dbo.T1 CONTINUE IDENTITY;  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Knyazev Alexey,

а зачем Вы транкейтите боевые таблицы? Это для временных буферов хорошо, а там не важен identity.
26 май 16, 11:25    [19222029]     Ответить | Цитировать Сообщить модератору
 Re: TRUNCATE TABLE dbo.T1 CONTINUE IDENTITY;  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Knyazev Alexey
TaPaK
SEQUENCE не решает этого?


зачем мне SEQUENCE? у меня таблицы с identity, и не хочу я транкейтом сбрасывать счётчик...не хочу запоминать текущее значение перед транкейтом и присваивать его "руками" после чистки

в этом вопросе мне особо нравится заголовок одной статьи "Stop making SQL Server do your dirty work", хоть она и не имеет отношения конкретно к этому случаю
26 май 16, 11:31    [19222078]     Ответить | Цитировать Сообщить модератору
 Re: TRUNCATE TABLE dbo.T1 CONTINUE IDENTITY;  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
А раньше как было? Identity ресидилось при транкейте ?
26 май 16, 11:32    [19222085]     Ответить | Цитировать Сообщить модератору
 Re: TRUNCATE TABLE dbo.T1 CONTINUE IDENTITY;  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
a_voronin
А раньше как было? Identity ресидилось при транкейте ?
Не только раньше, но и сейчас!
Однако, сам TRUNCATE TABLE требует разрешения на ALTER TABLE и имеет массу ограничений на применение.
В каком-то смысле он ближе к DDL, чем к DML.
Поэтому не так-то уж и часто требуется делать TRUNCATE TABLE в постоянных объектах для обычных пользователей.
26 май 16, 12:16    [19222387]     Ответить | Цитировать Сообщить модератору
 Re: TRUNCATE TABLE dbo.T1 CONTINUE IDENTITY;  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31444
Knyazev Alexey
Standard SQL has an identity column restart option which controls whether to restart or continue the identity value. Would be nice to see it in SQL Server:

Add the standard <identity column restart option> to the TRUNCATE statement in SQL Server:

14.10 <truncate table statement> Function
Delete all rows of a base table without causing any triggered action.
Format
<truncate table statement> ::= TRUNCATE TABLE <target table> [ <identity column restart option> ]
<identity column restart option> ::= CONTINUE IDENTITY | RESTART IDENTITY



https://connect.microsoft.com/SQLServer/feedback/details/2748210
Вот зачем это???

Лучше бы разрешили TRUNCATE для таблиц с FK. Нужна то лишь элементарная, не требующая ресурсов, проверка.
26 май 16, 17:54    [19224522]     Ответить | Цитировать Сообщить модератору
 Re: TRUNCATE TABLE dbo.T1 CONTINUE IDENTITY;  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
alexeyvg
Knyazev Alexey
Standard SQL has an identity column restart option which controls whether to restart or continue the identity value. Would be nice to see it in SQL Server:

Add the standard <identity column restart option> to the TRUNCATE statement in SQL Server:

14.10 <truncate table statement> Function
Delete all rows of a base table without causing any triggered action.
Format
<truncate table statement> ::= TRUNCATE TABLE <target table> [ <identity column restart option> ]
<identity column restart option> ::= CONTINUE IDENTITY | RESTART IDENTITY



https://connect.microsoft.com/SQLServer/feedback/details/2748210
Вот зачем это???

Лучше бы разрешили TRUNCATE для таблиц с FK. Нужна то лишь элементарная, не требующая ресурсов, проверка.

а потом вы захотите CASCADE DELETE :)
26 май 16, 17:58    [19224542]     Ответить | Цитировать Сообщить модератору
 Re: TRUNCATE TABLE dbo.T1 CONTINUE IDENTITY;  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31444
TaPaK
alexeyvg
пропущено...
Вот зачем это???

Лучше бы разрешили TRUNCATE для таблиц с FK. Нужна то лишь элементарная, не требующая ресурсов, проверка.

а потом вы захотите CASCADE DELETE :)
Я реалист :-)

Транкейт таблицы, на которую нет FK, возможен всегда.
А для транкейта таблицы, на которую есть FK, достаточно проверить, что "ссылающиеся" таблицы пустые.
Это ИМХО очень просто реализовать.
26 май 16, 18:08    [19224588]     Ответить | Цитировать Сообщить модератору
 Re: TRUNCATE TABLE dbo.T1 CONTINUE IDENTITY;  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
alexeyvg
Вот зачем это???


Зачем следовать стандарту? Даже не знаю, что Вам ответить!

А вообще были у меня задачки, где в буферных таблицах делался транкейт и накручивался счётчик...т.к. identity был суррогатным ключом, который после вставки в буфер не должен был меняться и с этим значением записи уходили в основную БД, а далее в хранилище
27 май 16, 09:58    [19226586]     Ответить | Цитировать Сообщить модератору
 Re: TRUNCATE TABLE dbo.T1 CONTINUE IDENTITY;  [new]
Jovanny
Member

Откуда:
Сообщений: 1195
Knyazev Alexey
А вообще были у меня задачки, где в буферных таблицах делался транкейт и накручивался счётчик...т.к. identity был суррогатным ключом, который после вставки в буфер не должен был меняться и с этим значением записи уходили в основную БД, а далее в хранилище
Аналогично.
30 май 16, 10:45    [19234775]     Ответить | Цитировать Сообщить модератору
 Re: TRUNCATE TABLE dbo.T1 CONTINUE IDENTITY;  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31444
Knyazev Alexey
alexeyvg
Вот зачем это???

Зачем следовать стандарту? Даже не знаю, что Вам ответить!

А вообще были у меня задачки, где в буферных таблицах делался транкейт и накручивался счётчик...т.к. identity был суррогатным ключом, который после вставки в буфер не должен был меняться и с этим значением записи уходили в основную БД, а далее в хранилище
Не, я понимаю, что стандарты - это Добро и Правильно.
И про применение понятно: для буферных таблиц, для чего же ещё.

Просто это ИМХО не так важно с практической точки зрения.
По сравнению с проблемой TRUNCATE-FK.

Вот они там в MS не делают того, что позарез нужно, и щас начнут Проектище по ресету IDENTITY для TRUNCATE :-(
Впрочем, ничего нового, всё как обычно :-)
30 май 16, 12:01    [19235363]     Ответить | Цитировать Сообщить модератору
 Re: TRUNCATE TABLE dbo.T1 CONTINUE IDENTITY;  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
alexeyvg
Knyazev Alexey
пропущено...

Зачем следовать стандарту? Даже не знаю, что Вам ответить!

А вообще были у меня задачки, где в буферных таблицах делался транкейт и накручивался счётчик...т.к. identity был суррогатным ключом, который после вставки в буфер не должен был меняться и с этим значением записи уходили в основную БД, а далее в хранилище
Не, я понимаю, что стандарты - это Добро и Правильно.
И про применение понятно: для буферных таблиц, для чего же ещё.

Просто это ИМХО не так важно с практической точки зрения.
По сравнению с проблемой TRUNCATE-FK.

Вот они там в MS не делают того, что позарез нужно, и щас начнут Проектище по ресету IDENTITY для TRUNCATE :-(
Впрочем, ничего нового, всё как обычно :-)
Они бы лучше придумали, как гарантированно получать значения вставленных IDENTITY-полей,
независимо от наличия триггеров (или с учётом вставленных записей внутри триггеров, даже вложенных)!
30 май 16, 12:19    [19235506]     Ответить | Цитировать Сообщить модератору
 Re: TRUNCATE TABLE dbo.T1 CONTINUE IDENTITY;  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31444
iap
Они бы лучше придумали, как гарантированно получать значения вставленных IDENTITY-полей,
независимо от наличия триггеров (или с учётом вставленных записей внутри триггеров, даже вложенных)!
Ну, в сиквеле много чего нужно сделать :-)
Но тут мы говорим про TRUNCATE...

Понятно, что проблема с IDENTITY ещё более важная.

Задачу из стартового топика в общем можно решить очень просто - сделать ресет для IDENTITY.
Задачу TRUNCATE-FK можно решить, (с проклятиями) убивая и создавая каждый раз FK
А вот для получения IDENTITY решений вообще нет, это могут сделать только в MS.
30 май 16, 12:33    [19235602]     Ответить | Цитировать Сообщить модератору
 Re: TRUNCATE TABLE dbo.T1 CONTINUE IDENTITY;  [new]
edyaN
Member

Откуда:
Сообщений: 185
Knyazev Alexey,

а ещё можно создать таблицу с тойже структурой, переключть в нее данные и уже её усечь. Это если версия позволяет.
наверняка есть ещё 20 способов решить эту задачу. Так что фича так себе.
30 май 16, 12:35    [19235609]     Ответить | Цитировать Сообщить модератору
 Re: TRUNCATE TABLE dbo.T1 CONTINUE IDENTITY;  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31444
edyaN
Knyazev Alexey,

а ещё можно создать таблицу с тойже структурой, переключть в нее данные и уже её усечь. Это если версия позволяет.
наверняка есть ещё 20 способов решить эту задачу. Так что фича так себе.
Да ресет делать ещё проще, чего там.

Понятно, было бы удобнее просто указывать опцию, и вообще, стандарты надо поддерживать, но, в общем, это не киллер-фича.
30 май 16, 12:39    [19235629]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить