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

Откуда: Москва
Сообщений: 4893
Необычный случай. Понадобилось мне добавить пару полей в существующую таблицу. Всё бы хорошо, но немалая часть этой таблицы лежит в READONLY партиции. До 2014 года всё в READONLY. Я уже было приготовился переводить партиции в READWRITE , но решил посмотреть, а какую ошибку она даст, если PARTITION_SCHEMA включает READONLY файловую группу. И тут ба ....

ALTER TABLE [dbo].[Stock] ADD [Самовывоз] [bit] NULL, [Courier_id] [int] NULL
GO

Выполнение команд успешно завершено.


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

Посмотрел, может она в READWRITE переведена была. Нет в READONLY.

При попытки изменить записи в этой партиции, естественно следует матюг со стороны сервера.

BEGIN TRAN 
UPDATE [dbo].[Stock] SET [Самовывоз] = 0 WHERE pk_date = 20110101
ROLLBACK TRAN 

Сообщение 652, уровень 16, состояние 1, строка 17
The index "i_Stock_pk_date" for table "dbo.Stock" (RowsetId 72057594195542016) resides on a read-only filegroup ("READONLY"), which cannot be modified.


Но это не помешало выполнить DDL.
10 дек 14, 14:39    [16977645]     Ответить | Цитировать Сообщить модератору
 Re: ALTER TABLE и READONLY  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
ALTER TABLE меняет метаданные.
А они тоже лежат в области READONLY?
Наверно нет.
Тем более, что новые поля - NULLable.
10 дек 14, 14:48    [16977729]     Ответить | Цитировать Сообщить модератору
 Re: ALTER TABLE и READONLY  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
a_voronin,

а что необычного, вы меняете метаданные таблицы, а они находятся в обычной файловой группе
кстати, попробуйте дропнуть уже существующее поле в тех же условиях
10 дек 14, 14:48    [16977731]     Ответить | Цитировать Сообщить модератору
 Re: ALTER TABLE и READONLY  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4893
iap,

Получается, что добавление NULLABLE полей вообще не вносит никаких изменений в фактические записи таблицы.
10 дек 14, 14:58    [16977817]     Ответить | Цитировать Сообщить модератору
 Re: ALTER TABLE и READONLY  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
a_voronin
iap,

Получается, что добавление NULLABLE полей вообще не вносит никаких изменений в фактические записи таблицы.
ЕМНИП да.
А вот если DEFAULT задать, то, небось, отказался бы поля добавлять.
Потому что туда сразу значение прописывать надо.
10 дек 14, 15:01    [16977842]     Ответить | Цитировать Сообщить модератору
 Re: ALTER TABLE и READONLY  [new]
msLex
Member

Откуда:
Сообщений: 9271
iap
a_voronin
iap,

Получается, что добавление NULLABLE полей вообще не вносит никаких изменений в фактические записи таблицы.
ЕМНИП да.
А вот если DEFAULT задать, то, небось, отказался бы поля добавлять.
Потому что туда сразу значение прописывать надо.

Не факт, с 12-ой версии добавление not null поля с дефолтом меняет только метаданные таблицы.
10 дек 14, 15:07    [16977909]     Ответить | Цитировать Сообщить модератору
 Re: ALTER TABLE и READONLY  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4893
msLex
iap
пропущено...
ЕМНИП да.
А вот если DEFAULT задать, то, небось, отказался бы поля добавлять.
Потому что туда сразу значение прописывать надо.

Не факт, с 12-ой версии добавление not null поля с дефолтом меняет только метаданные таблицы.


Вы меня опередили. Показываю скрин, чтобы никто не сомневался.

К сообщению приложен файл. Размер - 60Kb
10 дек 14, 15:11    [16977948]     Ответить | Цитировать Сообщить модератору
 Re: ALTER TABLE и READONLY  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
msLex
Не факт, с 12-ой версии добавление not null поля с дефолтом меняет только метаданные таблицы.

то есть поле not null остается незаполненным?
10 дек 14, 15:11    [16977954]     Ответить | Цитировать Сообщить модератору
 Re: ALTER TABLE и READONLY  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4893
Shakill
msLex
Не факт, с 12-ой версии добавление not null поля с дефолтом меняет только метаданные таблицы.

то есть поле not null остается незаполненным?


У меня возник ещё один интересный вопрос. Если в поле преобладает какое-то значение. Можно ли с помощью DEFAULT-ов уменьшить размер таблицы?
10 дек 14, 15:14    [16977977]     Ответить | Цитировать Сообщить модератору
 Re: ALTER TABLE и READONLY  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
a_voronin
У меня возник ещё один интересный вопрос. Если в поле преобладает какое-то значение. Можно ли с помощью DEFAULT-ов уменьшить размер таблицы?


как-то уж больно хитро это будет, на мой взгляд.
оно же не навсегда только в метаданных отражается. если строка будет апдейтиться, либо таблице/кластерному индексу rebuild/reorganize сделают, место под значение в строках уже реально будет выделено.
10 дек 14, 15:23    [16978040]     Ответить | Цитировать Сообщить модератору
 Re: ALTER TABLE и READONLY  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
a_voronin
Shakill
пропущено...

то есть поле not null остается незаполненным?


У меня возник ещё один интересный вопрос. Если в поле преобладает какое-то значение. Можно ли с помощью DEFAULT-ов уменьшить размер таблицы?


навечно
http://rusanu.com/2011/07/13/online-non-null-with-values-column-add-in-sql-server-11/
What happens when we update a row? The ‘default’ value is pushed into the row, even if the column was not modified
10 дек 14, 15:26    [16978066]     Ответить | Цитировать Сообщить модератору
 Re: ALTER TABLE и READONLY  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
Shakill, поправка, НЕ навечно
10 дек 14, 15:26    [16978071]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить