当我尝试在另一个计算字段中使用计算字段时,出现“计算列不允许在另一个计算列定义中使用”错误消息。有什么解决方法可以实现此目的吗?
计算字段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)
根据计算列文档:
计算列是根据可以使用同一表中其他列的表达式计算得出的。表达式可以是非计算列名、常量、函数以及由一个或多个运算符连接的这些的任意组合。该表达式不能是子查询。
计算列不能引用另一个计算列。您有以下选择:
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)
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)