Sql 计算持久化列

Sql 计算持久化列,sql,sql-server,sql-server-2012,sql-server-2008-r2,calculated-columns,Sql,Sql Server,Sql Server 2012,Sql Server 2008 R2,Calculated Columns,我试图对下面的查询获得的结果使用computed列的persistend选项,我在标量函数中使用了它。我遇到了以下错误 无法持久化表“ImplProject”中的计算列“Resources_1”,因为该列不确定 我试着在很多博客上搜索这个问题,但是找不到合适的解决方案。请帮忙 select ISNULL(STUFF((SELECT CHAR(10) + d.[Value] + ': ' + [dbo].[FullName](u.[FirstName], u.[LastName])

我试图对下面的查询获得的结果使用computed列的persistend选项,我在标量函数中使用了它。我遇到了以下错误

无法持久化表“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" 

好吧,如果列是不确定的,它就不能持久化,原因很清楚:
当一个持久化列的某个组件发生更改时,将计算该列,要获得可靠的值,计算该列的公式必须是确定性的。
如果计算列值的公式是不确定的,则必须在每次使用时计算它-这意味着它不能持久化

如果公式总是为相同的输入返回相同的值,则公式是确定的。
因为您的公式依赖于表中的数据,所以它不能是确定性的,因此您的列不能被持久化。

如果列是非确定性的,它就不能被持久化,原因很清楚:
当一个持久化列的某个组件发生更改时,将计算该列,要获得可靠的值,计算该列的公式必须是确定性的。
如果计算列值的公式是不确定的,则必须在每次使用时计算它-这意味着它不能持久化

如果公式总是为相同的输入返回相同的值,则公式是确定的。
因为您的公式依赖于表中的数据,所以它不能是确定性的,因此您的列不能被持久化。

您可以发布
ImplProject
的表定义吗?此外,查询是否是标量函数的全部内容?能否发布
ImplProject
的表定义?此外,查询是标量函数的全部内容吗?