SQL Сервер:сохранить вычисляемые поля с помощью ВЫБОРА В

StackOverflow https://stackoverflow.com/questions/398375

Вопрос

Моя компания недавно выполнила миграцию данных (в базе данных 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 * В Example2 ИЗ Example вы получаете:

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).

Заранее благодарю.

Это было полезно?

Решение

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

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

Другие советы

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

Насколько я понимаю, новая таблица создается на основе типов данных в наборе записей.Однако набор записей не содержит информации о том, как генерируются результирующие значения, поэтому формула вычисления теряется.(в качестве крайнего примера представьте представление, содержащее ГРУППУ BY в качестве источника для ВЫБОРА INTO)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top