我的公司最近执行了数据迁移(在SQL Server 2005数据库中),我们注意到使用SELECT INTO创建的某些表没有维护原始表的计算字段,而是SQL Server创建了具有该类型的常规字段由原始计算返回。例如,假设您有此表:
create table Example (
id int not null,
quantity decimal(19,5) not null,
price decimal(19,5) not null,
total as price*quantity
)
执行SELECT * INTO Example2 FROM FROM后,得到:
create table Example2 (
id int not null,
quantity decimal(19,5) not null,
price decimal(19,5) not null,
total decimal(38,9) null
)
我修复了丢弃坏字段并重新创建它们,但我想知道是否有一种方法可以维护使用SELECT INTO创建的表中的计算字段(可能使用一些特殊的SQL Server配置或使用备用SQL命令)。
提前致谢。
答案 0 :(得分:2)
我认为你不能用SELECT INTO做到这一点 - 就像你选择了一个视图一样,它只是把结果带到一张新桌子上。
您可能需要首先使用计算列创建表,然后从非计算列的源表中执行常规插入。
答案 1 :(得分:1)
作为策略,最好避免使用SELECT INTO来创建表,尤其是在迁移中。您不仅会丢失计算,还会丢失索引,触发器以及可能的任何默认值或约束。在迁移过程中,您应该始终编写要移动的表的脚本,包括触发器,索引等。
答案 2 :(得分:0)
我的理解是新表是根据记录集中的数据类型创建的。但是,记录集不包含有关如何生成结果值的信息 - 因此计算公式将丢失。 (作为极端的例子,考虑一个包含GROUP BY作为SELECT INTO源的视图)