SQL Server: сохранить вычисляемые поля с помощью SELECT INTO - PullRequest
2 голосов
/ 29 декабря 2008

Моя компания недавно провела миграцию данных (в базе данных SQL Server 2005), и мы заметили, что некоторые таблицы, созданные с помощью SELECT INTO, не поддерживали вычисляемые поля исходных таблиц, но вместо этого SQL Server создавал обычные поля с типом возвращается по первоначальному расчету. Например, предположим, что у вас есть эта таблица:

create table Example (
 id int not null,
 quantity decimal(19,5) not null,
 price decimal(19,5) not null,
 total as price*quantity 
)

после выполнения SELECT * INTO Example2 FROM с примера вы получаете:

create table Example2 (
 id int not null,
 quantity decimal(19,5) not null,
 price decimal(19,5) not null,
 total decimal(38,9) null
)

Я исправил удаление баговых полей и воссоздание их, но я хочу знать, есть ли способ сохранить вычисляемые поля в таблице, созданной с помощью SELECT INTO (возможно, с какой-то специальной конфигурацией SQL Server или с использованием альтернативного SQL команды).

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

Ответы [ 3 ]

2 голосов
/ 29 декабря 2008

Я не думаю, что вы могли бы сделать это с помощью SELECT INTO - Точно так же, как если бы вы выбирали для просмотра, он просто собирал результаты и перекачивал их в новую таблицу.

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

1 голос
/ 29 декабря 2008

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

0 голосов
/ 29 декабря 2008

Насколько я понимаю, новая таблица создается из типов данных в наборе записей. Однако набор записей не содержит информации о том, как генерируются результирующие значения - поэтому формула вычисления теряется. (в качестве крайнего примера представьте представление, содержащее GROUP BY, как источник для SELECT INTO)

...