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

KAK*_*AKA 9 t-sql sql-server

当我尝试在另一个计算字段中使用计算字段时,出现“计算列不允许在另一个计算列定义中使用”错误消息。有什么解决方法可以实现此目的吗?

计算字段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 
)
Run Code Online (Sandbox Code Playgroud)

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

消息 1759,级别 16,状态 0,第 5 行 表“ASSy”中的计算列“CALC STOCK NO”不允许在另一个计算列定义中使用。

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

Ser*_*rge 9

根据计算列文档:

计算列是根据可以使用同一表中其他列的表达式计算得出的。表达式可以是非计算列名、常量、函数以及由一个或多个运算符连接的这些的任意组合。该表达式不能是子查询。

计算列不能引用另一个计算列。您有以下选择:

  1. 创建第二个计算列,其中包含与第一个计算列(无法引用)相同的逻辑。
  2. 将第一个计算列替换为普通列:
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
Run Code Online (Sandbox Code Playgroud)
  1. VIEW在表格顶部创建一个并在其中实现第二列:
CREATE VIEW DBO.[vASSy]
AS
SELECT   t.*
        ,[PN & DESCRIPTION] = (ISNULL([CALC STOCK NO],'')+ ', '+ISNULL([TIRE SIZE],'')+', '+ ISNULL([BH SPEC],''))
FROM DBO.[ASSy] t
Run Code Online (Sandbox Code Playgroud)