计算的持久化列

时间:2018-07-02 18:51:24

标签: sql sql-server sql-server-2012 sql-server-2008-r2 calculated-columns

我试图在下面的查询获得的结果上使用计算列的持久选项,该查询已在标量函数中使用过。我遇到了以下错误。

  

表'ImplProject'中的计算列'Resources_1'无法保留,因为该列不确定。

我尝试搜索许多有关此问题的博客,但无法找到合适的解决方案。请帮助

select ISNULL(STUFF((SELECT CHAR(10) + d.[Value] + ': ' + [dbo].[FullName](u.[FirstName], u.[LastName])
        FROM [ImplProject] ip
            JOIN [Resource] r ON r.[EntityId] = ip.[Id]
            JOIN [Dropdown] d ON d.[Id] = r.[TypeDropdownId]
            LEFT JOIN [User] u ON u.[Id] = r.[UserId]
        WHERE ip.[Id] = @implid
        ORDER BY d.[Value]
        FOR XML PATH('')), 1, 1, ''), '') as "Resources" 

1 个答案:

答案 0 :(得分:2)

好吧,如果该列不是确定性的,则无法保留,并且很清楚为什么:
当其中一个组件的组成发生变化时,将计算一个持久列,并且要获取可靠的值,计算该列的公式必须是确定性的。
如果用于计算列值的公式是不确定的,则必须在每次使用时都对其进行计算-这意味着它不能持久保存。

如果公式对于相同的输入始终返回相同的值,则该公式是确定性的。 由于您的公式取决于表中的数据,因此无法确定性,因此您的列也无法保留。