Sql server 在SQL Server中创建表时出错

Sql server 在SQL Server中创建表时出错,sql-server,Sql Server,我得到以下错误: 无法持久化表“ProductIssue”中的计算列“OrderIssue”,因为该列不确定 当尝试创建包含以下列的表时: [OrderIssue] AS (case when [IssueID]=(1009) AND ([Issuenumber]>=(400000) AND [Issuenumber]<=(999999) OR [Issuenumber]<(400000) AND

我得到以下错误:

无法持久化表“ProductIssue”中的计算列“OrderIssue”,因为该列不确定

当尝试创建包含以下列的表时:

[OrderIssue]  AS 
(case 
    when [IssueID]=(1009) AND 
         ([Issuenumber]>=(400000) AND 
          [Issuenumber]<=(999999) OR 
          [Issuenumber]<(400000) AND 
          isnull(isnull([Enterdate],[Stagedate]),[lastClosingdate])<
                        dateadd(day,(0),'2013-04-01')) 
    then (0) 
    when [IssueID]=(1009) AND 
         ([Issuenumber]>=(400000) OR 
          [Issuenumber]<(700000) AND 
          isnull(isnull([Enterdate],[Stagedate]),[lastclosingdate])>=
                        dateadd(day,(0),'2013-04-01')) 
    then (1)  
end) PERSISTED
[OrderIssue]作为
(案例
当[IssueID]=(1009)和
([Issuenumber]>=(400000)和

[Issuenumber]您的日期列不具有确定性。请尝试将它们转换为整数,如下所示:

[OrderIssue] AS (case when [IssueID]=(1009) AND ([Issuenumber]>=(400000) AND [Issuenumber]<=(999999) OR [Issuenumber]<(400000) AND cast(convert(varchar(8),isnull(isnull([Enterdate],[Stagedate]),[lastClosingdate]),112) as int)=(400000) OR [Issuenumber]<(700000) AND cast(convert(varchar(8),isnull(isnull([Enterdate],[Stagedate]),[lastClosingdate]),112) as int)>=20130401) then (1) end) PERSISTED)

干杯,

您的日期列使其不确定。请尝试将其转换为整数,如下所示:

[OrderIssue] AS (case when [IssueID]=(1009) AND ([Issuenumber]>=(400000) AND [Issuenumber]<=(999999) OR [Issuenumber]<(400000) AND cast(convert(varchar(8),isnull(isnull([Enterdate],[Stagedate]),[lastClosingdate]),112) as int)=(400000) OR [Issuenumber]<(700000) AND cast(convert(varchar(8),isnull(isnull([Enterdate],[Stagedate]),[lastClosingdate]),112) as int)>=20130401) then (1) end) PERSISTED)

干杯,

这是一个非常奇怪的设计。您确定需要将其保存在持久化列中吗?您实际上想实现什么?从msdn中,计算列是一个虚拟列,除非该列被标记为持久化。计算列表达式可以使用其他列中的数据进行校准为它所属的列计算一个值。它看起来像是在尝试在视图合适的位置使用持久化列。在
Case
语句中没有
Else
。如果两个语句都不是真的,会发生什么?这就是为什么会出现不确定的错误。这是一个非常奇怪的设计。你知道吗u确实需要在持久化列中包含此内容?您实际想要实现的是什么?从msdn中,计算列是一个虚拟列,除非该列标记为持久化。计算列表达式可以使用其他列中的数据来计算它所属列的值。它是像您这样的ook试图在视图合适的位置使用持久化列。在
Case
语句中没有
Else
。如果两个语句都不正确会发生什么?这就是为什么您会出现不确定错误的原因。