0

我正在尝试在 SQL Server 2012 Express 中添加一个自动计算的字段,该字段通过使用以下方法计算日期差异来存储项目完成的百分比:

ALTER TABLE dbo.projects
ADD PercentageCompleted AS (select COUNT(*)  FROM projects WHERE project_finish > project_start) * 100 / COUNT(*)

但我收到此错误:

Msg 1046, Level 15, State 1, Line 2
Subqueries are not allowed in this context. Only scalar expressions are allowed.

我究竟做错了什么?

4

3 回答 3

0

我不认为你能做到这一点。您可以编写一个触发器来解决它或将其作为更新语句的一部分。

于 2013-04-15T18:38:05.170 回答
0

即使它是可能的(它不是),它无论如何也不是你想要作为计算列的东西:

  1. 每一行的值都相同
  2. 每次插入/更新后都需要更新整个表

您应该考虑在 astored procedure或 user中执行此操作defined function。甚至在应用程序的业务逻辑中更好,

于 2013-04-15T18:43:28.647 回答
0

您是否将“percentageCompleted”作为重复的列值存储在与项目数据相同的表中?

如果是这种情况,我不建议这样做,因为它会复制数据。

如果您不关心重复数据,请尝试将步骤分开,如下所示:

ALTER TABLE dbo.projects ADD PercentageCompleted decimal(2,2)--您也可以将其存储为 varchar 或 char

declare @percentageVariable decimal(2,2)

select @percentageVariable = (select count(*) from projects where Project_finish > project_start) / (select count(*) from projects)-- 需要通过完成/总获得比率

update projects
set PercentageCompleted = @percentageVariable

这将在该表中为您提供一个十进制值,然后您可以在选择时对其进行格式化,如果您希望 % + PercentageCompleted * 100

于 2013-04-15T18:48:27.683 回答