我试图在下面的查询获得的结果上使用计算列的持久选项,该查询已在标量函数中使用过。我遇到了以下错误。
表'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"
答案 0 :(得分:2)
好吧,如果该列不是确定性的,则无法保留,并且很清楚为什么:
当其中一个组件的组成发生变化时,将计算一个持久列,并且要获取可靠的值,计算该列的公式必须是确定性的。
如果用于计算列值的公式是不确定的,则必须在每次使用时都对其进行计算-这意味着它不能持久保存。
如果公式对于相同的输入始终返回相同的值,则该公式是确定性的。 由于您的公式取决于表中的数据,因此无法确定性,因此您的列也无法保留。