【问题标题】:computed persisted column计算的持久列
【发布时间】:2018-07-02 18:51:23
【问题描述】:

我正在尝试对通过以下查询获得的结果使用计算列的持久化选项,我已在标量函数中使用它。我遇到了以下错误。

表“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 的表定义吗?另外,查询是标量函数的全部内容吗?

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-16
    • 1970-01-01
    • 2011-07-13
    • 1970-01-01
    • 2010-10-29
    • 2010-09-18
    • 2019-04-02
    相关资源
    最近更新 更多