SQL Server:使用SELECT INTO保留计算字段

时间:2008-12-29 19:14:10

标签: sql-server calculated-columns select-into

我的公司最近执行了数据迁移(在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命令)。

提前致谢。

3 个答案:

答案 0 :(得分:2)

我认为你不能用SELECT INTO做到这一点 - 就像你选择了一个视图一样,它只是把结果带到一张新桌子上。

您可能需要首先使用计算列创建表,然后从非计算列的源表中执行常规插入。

答案 1 :(得分:1)

作为策略,最好避免使用SELECT INTO来创建表,尤其是在迁移中。您不仅会丢失计算,还会丢失索引,触发器以及可能的任何默认值或约束。在迁移过程中,您应该始终编写要移动的表的脚本,包括触发器,索引等。

答案 2 :(得分:0)

我的理解是新表是根据记录集中的数据类型创建的。但是,记录集不包含有关如何生成结果值的信息 - 因此计算公式将丢失。 (作为极端的例子,考虑一个包含GROUP BY作为SELECT INTO源的视图)