sql-server - 不允许在另一个计算列定义中使用计算列

标签 sql-server tsql

我得到不允许在另一个计算列中使用计算列
当我尝试在另一个计算域中使用一个计算域时的定义错误消息。有什么解决方法可以实现这一点吗?

计算域1

ALTER TABLE DBO.[ASSy] ADD [CALC STOCK NO] AS (

CASE 
WHEN isnull([DIRECTIONAL TREAD],'') ='YES RIGHT' THEN isnull([STOCK NO],'')+'R'
WHEN isnull([DIRECTIONAL TREAD],'') ='YES LEFT' THEN isnull([STOCK NO],'')+'L'
ELSE isnull([STOCK NO],'')
end 
)

下面是第二个计算域。当我执行脚本时,我得到

Msg 1759, Level 16, State 0, Line 5 Computed column 'CALC STOCK NO' in table 'ASSy' is not allowed to be used in another computed-column definition.


ALTER TABLE dbo.[ASSy] ADD [PN & DESCRIPTION] AS (ISNULL([CALC STOCK NO],'')+ ', '+ISNULL([TIRE SIZE],'')+', '+ ISNULL([BH SPEC],''))

最佳答案

根据 Computed Columns文档:

A computed column is computed from an expression that can use other columns in the same table. The expression can be a noncomputed column name, constant, function, and any combination of these connected by one or more operators. The expression cannot be a subquery.



一个计算列不能引用另一个计算列。您有以下选择:
  • 创建第二个计算列,其中包含与第一个计算列(无法引用)相同的逻辑。
  • 用普通列替换第一个计算列:

  • ALTER TABLE DBO.[ASSy] DROP COLUMN [CALC STOCK NO]
    ALTER TABLE ADD [CALC STOCK NO] VARCHAR(100) NULL
    UPDATE TABLE t
        SET [CALC STOCK NO] = 
            CASE 
            WHEN isnull([DIRECTIONAL TREAD],'') ='YES RIGHT' THEN isnull([STOCK NO],'')+'R'
            WHEN isnull([DIRECTIONAL TREAD],'') ='YES LEFT' THEN isnull([STOCK NO],'')+'L'
            ELSE isnull([STOCK NO],'')
            END
    FROM [CALC STOCK NO] t
    
  • 创建一个 VIEW在表格顶部并在其中实现您的第二列:

  • CREATE VIEW DBO.[vASSy]
    AS
    SELECT   t.*
            ,[PN & DESCRIPTION] = (ISNULL([CALC STOCK NO],'')+ ', '+ISNULL([TIRE SIZE],'')+', '+ ISNULL([BH SPEC],''))
    FROM DBO.[ASSy] t
    

    关于sql-server - 不允许在另一个计算列定义中使用计算列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42358013/

    相关文章:

    sql-server - 有没有办法从 sqlcmd 获取当前正在执行的文件?

    sql - 提高 MS SQL 事务性能

    c# - 更改对象列表的编码

    sql - 有没有比这更快的方法从 T-SQL 中的 XML 节点中提取数据?

    c# - 将 C# 类转换为 SQL 表

    sql - 非均匀分布数据集的 NTILE 替代方案

    sql-server - 无法解决 SELECT 语句中第 4 列的排序规则冲突

    sql-server - 根据每 n 个时间间隔选择行

    c# - SELECT 和 UPDATE 表,因此没有线程重叠

    sql - 从 SQL 获取未转义的 JSON