如何在SQL Server 2008中更改此计算列?

And*_*nda 53 sql edit calculated-columns alter sql-server-2008

我有一个使用以下行创建的计算列:

alter table tbPedidos 
add restricoes as (cast(case when restricaoLicenca = 1 or restricaoLote = 1 then 1 else 0 end as bit))
Run Code Online (Sandbox Code Playgroud)

但是,现在我需要更改此列,例如:

alter table tbPedidos 
alter column restricoes as (cast(case when restricaoLicenca = 1 or restricaoLote = 1 or restricaoValor = 1 then 1 else 0 end as bit))
Run Code Online (Sandbox Code Playgroud)

但它不起作用.我正在尝试为case语句输入另一个条件,但它不起作用.

非常感谢!

Len*_*rri 69

像这样的东西:

ALTER TABLE dbo.MyTable
DROP COLUMN OldComputedColumn

ALTER TABLE dbo.MyTable
ADD OldComputedColumn AS OtherColumn + 10
Run Code Online (Sandbox Code Playgroud)

资源

  • 如果所有列中间都有一个计算列怎么办?这个“DROP + ADD”不会导致该列添加到表的末尾(并编辑所有其他列的“ORDINAL”位置吗?) (2认同)

Mic*_*odd 67

如果您尝试更改现有列,则无法使用ADD.相反,试试这个:

alter table tbPedidos将列限制更改为(强制转换(当limitaoLicenca = 1或者restrictaoLote = 1或者limitaoValor = 1时的情况,然后是1,否则0结束为bit))

编辑:以上是不正确的.更改计算列时,您唯一可以做的就是删除它并重新添加它.


Tim*_*ner 5

在这种情况下,仅使用SQL Server Management Studio 的图表功能可以更轻松、更快捷。

  1. 创建一个新图表,添加表,然后选择在图表的表视图中显示公式列。
  2. 将列公式更改为空字符串('')或同样无害的内容(可能不会更改列的数据类型)。
  3. 保存图表(这应该保存表格)。
  4. 改变你的功能。
  5. 将函数放回到该列的公式中。
  6. 再次保存。

在 SSMS 中这样做将保留表中列的顺序,但简单的方法drop...add无法保证这一点。这对某些人来说可能很重要。

  • 这是一个有用的解决方案。我想限定一下,当处理非常大的表(数百万到数十亿行)时,这将导致表重建。这可能需要几个小时才能完成,具体取决于表的宽度和存储的数据类型(例如 MAX)。为了避免表重建,需要删除和添加;前提是对表的所有 SQL 查询都不是通过精确字段顺序特定的查询完成的(即 INSERT INTO,没有字段名称) (2认同)