【发布时间】:2010-02-16 16:34:05
【问题描述】:
我正在使用 SQL Server 2008。是否可以更改计算列而不实际删除该列然后再次添加它(我可以开始工作)?比如我有这张表:
CREATE TABLE [dbo].[Prices](
[Price] [numeric](8,3) NOT NULL,
[AdjPrice] AS [Price] / [AdjFactor],
[AdjFactor] [numeric](8,3) NOT NULL)
后来意识到我有一个潜在的除以零错误我想更改 [Adjprice] 列来处理这个问题,但如果我只是删除该列并再次添加它,我会丢失列顺序。
我想做这样的事情:
ALTER TABLE dbo.[Prices]
ALTER COLUMN [AdjPrice] AS (CASE WHEN [AdjFactor] = 0 THEN 0 ELSE [Price] / [AdjFactor] END)
但这是不正确的。如果这是可能的,或者有其他解决方案,我将不胜感激。
【问题讨论】:
-
列顺序在 SQL Server 中是完全不相关的——为什么还要保留它呢?删除和重新创建是唯一的方法。
-
如果您编写的查询依赖于列顺序,请停止。
-
有时需要保留列顺序。例如,如果您的客户使用 bcp 导入数据并使用格式文件。然后格式文件也需要更改,如果您在客户网站上进行任何进一步更新,则需要始终记住这一点。
-
@marc_s 列顺序不是无关的。如果您在列列表的中间或末尾添加/删除列,SQL Server 处理表更新的方式非常不同:这可能意味着延迟数小时。愚蠢,但非常令人恼火的行为。即使是微小的修正,也绝对会阻碍生产更新。
标签: sql sql-server