我得到计算列不允许在另一个计算列中使用 我试图在另一个计算字段中使用计算字段时定义错误消息。有没有解决办法来实现这个目标?
Computed field1
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'在 表' ASSy'不允许在另一个人中使用 计算列定义。
ALTER TABLE dbo.[ASSy] ADD [PN & DESCRIPTION] AS (ISNULL([CALC STOCK NO],'')+ ', '+ISNULL([TIRE SIZE],'')+', '+ ISNULL([BH SPEC],''))
答案 0 :(得分:2)
不允许。
变通方法是在另一列的定义中重复整个代码,或者将共享代码封装在标量UDF中,或者将逻辑拉到视图中(如果它不是持久的,通常就足够了)用于编制索引的列)
答案 1 :(得分:1)
根据Computed Columns文档:
计算列是根据可以使用其他的表达式计算的 同一个表中的列。 表达式可以是非计算列 名称,常量,函数以及这些连接的任意组合 一个或多个运算符。表达式不能是子查询。
计算列不能引用另一个计算列。您有以下选择:
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