Pergunta

A minha empresa realizou uma migração de dados recentemente (em um banco de dados SQL Server 2005) e percebemos que algumas tabelas criadas com SELECT INTO não manteve os campos calculados das tabelas originais, mas em vez disso SQL Server criado campos regulares com o tipo retornado pelo cálculo inicial. Por exemplo, suponha que você tem esta tabela:

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

depois de fazer um SELECT * INTO Example2 do exemplo que você tem:

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

Eu fixo-lo soltando os campos ruins e criá-los, mas eu quero saber se existe uma maneira de manter os campos calculados na tabela criada com o SELECT INTO (talvez com alguma configuração especial SQL Server ou usando um SQL alternativa comando).

Agradecemos antecipadamente.

Foi útil?

Solução

Eu não acho que você seria capaz de fazer isso com SELECT INTO -. Assim como se estivesse selecionando contra um ponto de vista, é só tomar os resultados e bombeá-los para uma nova tabela

É provável que você precisa para criar a tabela com as colunas computadas em primeiro lugar, em seguida, fazer uma inserção normal da tabela de origem das colunas não computadas.

Outras dicas

Como política é melhor evitar o uso de SELECT INTO para criar tabelas especialmente em uma migração. Você não só vai perder os cálculos, você vai perder índices, gatilhos e, provavelmente, quaisquer incumprimentos ou constrangimentos. Em uma migração você deve sempre roteiro as tabelas que você deseja mover, incluindo triggers, índices etc.

O meu entendimento é que a nova tabela é criada a partir dos tipos de dados no conjunto de registros. No entanto, o conjunto de registros não contém informações sobre como os valores resultantes são gerados - portanto, a fórmula de cálculo é perdida. (Como exemplo extremo, pense em uma exibição que contém um GROUP BY como fonte para um SELECT INTO)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top