Question

Mon entreprise a effectué une migration de données récemment (dans une base de données SQL Server 2005) et nous avons remarqué que certaines tables créées avec SELECT INTO ne maintenu les champs calculés des tableaux originaux, mais au lieu de SQL Server ont créé des champs réguliers avec le type renvoyée par le calcul initial. Par exemple, supposons que vous avez ce tableau:

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

après avoir fait un SELECT * INTO Example2 de l'exemple que vous obtenez:

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

Je l'ai fixé tomber les mauvais champs et les recréer, mais je veux savoir s'il y a un moyen de maintenir les champs calculés dans la table créée avec INTO SELECT (peut-être avec une configuration spéciale SQL Server ou en utilisant une alternative SQL commande).

Merci d'avance.

Était-ce utile?

La solution

Je ne pense pas que vous seriez en mesure de le faire avec SELECT INTO -. Comme si vous sélectionnez contre une vue, il faut juste les résultats et les pomper vers une nouvelle table

Vous aurez probablement besoin de créer la table avec les colonnes calculées d'abord, puis faire un insert régulier de la table source des colonnes non calculées.

Autres conseils

En tant que politique est-il préférable d'éviter d'utiliser SELECT INTO pour créer des tableaux en particulier dans une migration. Vous ne perdrez pas seulement les calculs, vous perdrez des index, des déclencheurs et probablement des défauts ou des contraintes. Dans une migration, vous devez toujours scripter les tables que vous souhaitez déplacer, y compris les déclencheurs, les index, etc.

Ma compréhension est que la nouvelle table est créée à partir des types de données dans le jeu d'enregistrements. Cependant, le jeu d'enregistrements ne contient pas d'informations sur la façon dont les valeurs résultantes sont générées - donc la formule de calcul est perdue. (À titre d'exemple extrême, penser à une vue contenant une BY GROUP en tant que source pour une INTO SELECT)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top