是否可以在表中(而不是从视图中)使用列(SQL SERVER 2008)根据另一列中的值进行更改,即如果我有一个名为“DUEDATE”的列,我可以使用名为“STATUS”的列“如果”DUEDATE“是>那将把状态改为”Now Due“ GETDATE()?如果是这样,你如何将其添加到表中?
答案 0 :(得分:0)
是的,您可以创建一个计算列:
CREATE TABLE [dbo].[SampleTable](
[DueDate] [date] NULL,
[ComputedValue] AS (CASE WHEN [Duedate] > GETDATE() THEN 'Now Due' ELSE '' END)
) ON [PRIMARY]
由于这是一个非确定性的列(因为每次使用表时GETDATE()
的值都不同),将它添加到表中并不会给你带来很多好处。选择查询。
答案 1 :(得分:0)
您可以更改表并添加计算列:
ALTER TABLE dbo.TheTable
ADD Status AS CASE WHEN ...
你不能坚持它,因为它是非确定性的,所以不要添加PERSISTED或尝试在其上添加索引。
从索引的角度来看,不要尝试使用WHERE Status ='whatever'来查询它,因为它必须考虑表中的每一行。相反,在DueDate和WHERE DueDate< = GETDATE()
上使用索引