2015-03-16 5 views
0

Я пытаюсь добавить столбец в таблицу tsql, я делаю это с помощью SMO в C#. Изменение таблицы в порядке, но я хочу, чтобы столбец имел значение. Таблица содержит 650 миллионов строк, и запрос на обновление занимает полтора дня для запуска.Эффективно добавьте столбец со значением

Update [TempDatabase]. [DBO]. [Table1] установлен RawSource = 'DTP'

Это запрос, я бегу выше.

Может ли кто-нибудь подумать об более эффективном способе этого?

Заранее спасибо.

+0

Я слышал о «столбце быстрого добавления», но только для базы данных Oracle. https://asktom.oracle.com/pls/asktom/f?p=100:11:0%3a%3a%3a%3aP11_QUESTION_ID:2575782100346318728 Если вы используете SQL Server, я не знаю лучшего способа. – gvo

ответ

2

Иногда эффективнее копировать таблицу с новым значением и воссоздать таблицу в одной команде. Кроме того, вы можете быть уверены, что у вас минимальная регистрация для этих операций.

Вероятно, лучшим решением будет использовать значение default при создании столбца:

alter table table1 add RawSource varchar(255) not null default 'DTP'; 

Если вы не хотите, чтобы двигаться вперед по умолчанию, вы можете удалить его после добавления колонки.

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

alter table table1 add _RawSource varchar(255); 

alter table1 add RawSource as (coalesce(_RawSource, 'DTP')); 
+0

Вам понадобится определение столбца 'NOT NULL', иначе он не будет заполнять существующие строки значением по умолчанию – paul

0

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

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

alter table table_name 
add row_source nvarchar(5) not null default(N'DTP') 
Смежные вопросы