Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 不允许在另一个计算列定义中使用计算列_Sql Server_Tsql - Fatal编程技术网

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

Sql server 不允许在另一个计算列定义中使用计算列,sql-server,tsql,Sql Server,Tsql,I get Computed列不允许在另一个计算列中使用 试图在另一个计算字段中使用计算字段时出现定义错误消息。是否有任何解决方法来实现这一点 计算字段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],'') =

I get Computed列不允许在另一个计算列中使用 试图在另一个计算字段中使用计算字段时出现定义错误消息。是否有任何解决方法来实现这一点

计算字段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,第16级,状态0,第5行计算列“计算库存编号” 表“ASSy”不允许在其他应用程序中使用 计算列定义

不允许

解决方法是在另一列的定义中重复整个代码,或将共享代码封装在标量UDF中,或将逻辑向上拉到一个视图中,如果该视图不是用于索引目的的持久化列,则该视图通常就足够了

计算列是从可以使用其他 同一表中的列。表达式可以是非计算列 名称、常量、函数以及通过 一个或多个操作员。表达式不能是子查询

计算列不能引用其他计算列。您有以下选择:

创建第二个计算列,该列包含与第一个计算列相同的逻辑,但无法引用。 将第一个计算列替换为普通列: 更改表DBO。[ASSy]下拉列[计算库存编号] ALTER TABLE ADD[计算库存编号]VARCHAR100 NULL 更新表t 设置[计算库存编号]= 案例 当isnull[DIRECTIONAL TREAD]、='YES RIGHT'时,则isnull[STOCK NO]、+'R' 当isnull[方向踏板]、='YES LEFT'时,则isnull[库存编号]、+'L' ELSE为空[库存编号], 终止 来自[计算库存编号]t 在表顶部创建一个视图,并在其中实现第二列: 创建视图DBO。[vASSy] 像 选择t* ,[PN&DESCRIPTION]=ISNULL[计算库存编号],+','+ISNULL[轮胎尺寸],+','+ISNULL[BH规格], 来自DBO[ASSy]t
这也是一个有效的选择。但是,请注意,标量UDF强制查询优化器生成串行而不是并行计划,这可能会显著降低查询性能。如果你真正想做的是逻辑封装,那就创建一个。Serge有一个问题,我将使用在c应用程序中创建的视图,那么插入到这个视图中也会将相同的内容插入到表“ASSy”中,或者反之亦然,对吗?。INSERT语句到视图vASSy也会影响ASSyYes,该视图只是-它不是一个真正的表。在许多情况下,您可以在视图上执行INSERT语句,但有一些限制。请参阅创建视图文档的一节。
ALTER TABLE dbo.[ASSy] ADD [PN & DESCRIPTION] AS (ISNULL([CALC STOCK NO],'')+ ', '+ISNULL([TIRE SIZE],'')+', '+ ISNULL([BH SPEC],''))