2

我的公司最近进行了一次数据迁移(在 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 Example 之后,您会得到:

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 命令)。

提前致谢。

4

4 回答 4

2

我认为您无法使用 SELECT INTO 执行此操作 - 就像您针对视图进行选择一样,它只是将结果提取到新表中。

您可能需要先创建包含计算列的表,然后从非计算列的源表中进行常规插入。

于 2008-12-29T19:31:17.253 回答
1

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

于 2008-12-29T20:15:00.720 回答
0

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

于 2008-12-29T19:30:40.123 回答
0

如果您不想修改 Select Into 语句,另一种方法是删除列(Alter Table Drop Column)并将它们重新创建(Alter Table Add)作为计算列。

于 2021-09-30T18:14:52.373 回答