Domanda

La mia azienda ha eseguito una migrazione dei dati di recente (in un database SQL Server 2005) e abbiamo notato che alcune tabelle create con SELECT INTO non hanno mantenuto i campi calcolati delle tabelle originali, ma invece di SQL Server creati campi regolari con il tipo restituito dal calcolo originale. Per esempio, supponiamo che avete questa tabella:

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

dopo aver fatto un SELECT * INTO Example2 dell'esempio si ottiene:

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

ho riparato cadere i campi cattivi e li ricrea, ma voglio sapere se c'è un modo per mantenere i campi calcolati nella tabella creata con il SELECT INTO (magari con qualche configurazione speciale di SQL Server o utilizzando uno SQL alternativa di comando).

Grazie in anticipo.

È stato utile?

Soluzione

Non credo che si sarebbe in grado di fare questo con SELECT INTO -. Proprio come se si stesse selezionando su una vista, è solo prendendo i risultati e il pompaggio ad una nuova tabella

È probabile che tu debba creare la tabella con le colonne calcolate prima, poi fare un inserto regolare dalla tabella di origine delle colonne non calcolate.

Altri suggerimenti

A seguito della politica è meglio evitare di usare SELECT INTO per creare tabelle soprattutto in una migrazione. Non solo si perde i calcoli, si perderanno gli indici, trigger e probabilmente eventuali inadempienze o vincoli. In una migrazione si dovrebbe sempre di script fuori le tabelle che si desidera spostare inclusi trigger, indici, ecc

La mia comprensione è che la nuova tabella viene creata dai tipi di dati nel set di record. Tuttavia set di record non contiene informazioni su come i valori risultanti vengono generati - quindi la formula di calcolo viene persa. (Come esempio estremo, pensare a una vista contenente un GROUP BY come sorgente per un SELECT INTO)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top