Pregunta

Mi empresa lleva a cabo una migración de datos recientemente (en una base de datos de SQL Server 2005) y nos dimos cuenta de que algunas tablas creadas con SELECT INTO no mantienen los campos calculados de las tablas originales, pero en lugar de SQL Server crean campos regulares con el tipo devuelto por el cálculo original. Por ejemplo, suponga que tiene esta tabla:

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

después de hacer un SELECT * EN Ejemplo 2 a partir del ejemplo que se obtiene:

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

Me fijo que dejar caer los malos campos y volver a crearlos, pero yo quiero saber si hay una manera de mantener los campos calculados en la tabla creada con el SELECT INTO (tal vez con alguna configuración especial de SQL Server o utilizando un SQL alternativa de comandos).

Gracias de antemano.

¿Fue útil?

Solución

No creo que sería capaz de hacer esto con SELECT INTO -. Al igual que si estuviera seleccionando contra un punto de vista, es simplemente tomar los resultados y el bombeo a una nueva tabla

probablemente necesitará para crear la tabla con las columnas calculadas primero, y luego hacer una inserción regular a partir de la tabla de origen de las columnas no calculado.

Otros consejos

Como política es que lo mejor es evitar el uso de SELECT INTO para crear tablas especialmente en una migración. No sólo perderá los cálculos, perderá índices, triggers y probablemente cualquier defecto o limitaciones. En una migración debe siempre guión en las tablas que desea mover incluyendo disparadores, índices, etc.

Mi entendimiento es que la nueva tabla se crea a partir de los tipos de datos en el conjunto de registros. Sin embargo, el conjunto de registros no contiene información sobre cómo se generan los valores resultantes - por lo tanto, se pierde la fórmula de cálculo. (Como ejemplo extremo, pensar en una vista que contiene un GROUP BY como fuente para un SELECT INTO)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top