我正在尝试在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.
我做错了什么?
答案 0 :(得分:0)
我认为你不能那样做。您可以编写一个触发器来计算它,或者将其作为更新语句的一部分。
答案 1 :(得分:0)
即使它有可能(事实并非如此),但无论如何都不是你想要作为一个计算列的东西:
您应该考虑在stored procedure
或用户defined function
中执行此操作。或者在应用程序的业务逻辑中更好,
答案 2 :(得分: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
,您可以在select上格式化它