我试图在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.
我做错了什么?
即使它是可能的(它不是),它也不是您想要作为计算列的东西:
- 每一行都是相同的值
- 整个表需要在每次插入/更新 之后更新。
您应该考虑在stored procedure
或用户defined function
中执行此操作。或者在应用程序的业务逻辑中更好,
我认为你做不到。您可以编写一个触发器来计算它,或者将其作为更新语句的一部分。
您是否将"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
这将给你一个十进制值,然后你可以在select上格式化它,如果你想% + PercentageCompleted * 100