在表中使用CASE语句

时间:2014-02-05 09:45:03

标签: sql sql-server-2008

是否可以在表中(而不是从视图中)使用列(SQL SERVER 2008)根据另一列中的值进行更改,即如果我有一个名为“DUEDATE”的列,我可以使用名为“STATUS”的列“如果”DUEDATE“是>那将把状态改为”Now Due“ GETDATE()?如果是这样,你如何将其添加到表中?

2 个答案:

答案 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()

上使用索引