Frage

Meine Firma eine Datenmigration durchgeführt kürzlich (in einem SQL Server 2005-Datenbank) und wir festgestellt, dass einige Tabellen mit SELECT INTO erstellt nicht den berechneten Feldern der ursprünglichen Tabellen gepflegt haben, sondern SQL Server regelmäßig Felder mit der Art erstellt von der ursprünglichen Berechnung zurückgegeben. Angenommen, dass Sie in dieser Tabelle haben:

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

nach einer SELECT * INTO tun Example2 aus Beispiel erhalten Sie:

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

Ich reparierte es die schlechten Felder löschen und neu sie, aber ich möchte wissen, ob es eine Möglichkeit der Aufrechterhaltung der berechneten Felder in der Tabelle mit der SELECT INTO (vielleicht mit einigen speziellen SQL Server-Konfiguration oder mit einer alternativen SQL erstellt ist Befehl).

Vielen Dank im Voraus.

War es hilfreich?

Lösung

Ich glaube nicht, Sie, dies zu tun mit SELECT INTO der Lage wäre, -. Genau wie wenn Sie eine Sicht der Auswahl wurden, es ist nur die Ergebnisse zu nehmen und sie in eine neue Tabelle Pumpen

Sie müssen wahrscheinlich die Tabelle mit den berechneten Spalten erstellen zuerst, dann aus der Quelltabelle der nicht berechneten Spalten einen regulären Einsatz tun.

Andere Tipps

Als eine Politik ist es am besten SELECT INTO zu vermeiden, mit Tabellen zu erstellen, vor allem in einer Migration. Sie werden nicht nur die Berechnungen verlieren, verlieren Sie Indizes, Trigger und wahrscheinlich keine Vorgaben oder Einschränkungen. Bei einer Migration sollten Sie immer Skript aus den Tabellen möchten Sie Trigger, Indizes usw. bewegen einschließlich

Mein Verständnis ist, dass die neue Tabelle aus den Datentypen im Datensatz erstellt wird. Doch der Datensatz enthält keine Informationen darüber, wie die resultierenden Werte erzeugt werden - daher die Berechnungsformel verloren. (Als extremes Beispiel denke an eine Ansicht, welche eine GROUP BY als Quelle für eine SELECT INTO enthält)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top