Tsql 我可以在计算列select案例中抛出错误吗?
我的计算列中有一个“case-when”,但我不知道如何抛出异常 下面是不起作用的示例代码Tsql 我可以在计算列select案例中抛出错误吗?,tsql,calculated-columns,Tsql,Calculated Columns,我的计算列中有一个“case-when”,但我不知道如何抛出异常 下面是不起作用的示例代码 CREATE TABLE OrderDetail ( OrderID INT , ProductID INT , Qty INT , OrderDate DATETIME , ShipDate DATETIME , STATUS AS CASE WHEN shipdate is NULL AND orderdate < DATEADD( dd, -7, GETDATE()) THEN
CREATE TABLE OrderDetail
( OrderID INT
, ProductID INT
, Qty INT
, OrderDate DATETIME
, ShipDate DATETIME
, STATUS AS CASE
WHEN shipdate is NULL AND orderdate < DATEADD( dd, -7, GETDATE()) THEN 3
WHEN shipdate is NOT NULL THEN 2
ELSE RAISERROR ('Error in shipdate',-1,-1)
end
)
GO
创建表OrderDetail
(OrderID INT)
,ProductID INT
,数量整数
,OrderDate日期时间
,发货日期时间
,情况如何
当shipdate为NULL且orderdate
但它是无效的
难道不可能在计算列中引发错误吗?这不能这样做。大小写表达式不能用作流控件。具体来说: CASE表达式不能用于控制Transact-SQL语句、语句块、用户定义函数和存储过程的执行流 您可以向表中添加检查约束,但这不允许您提出自己的自定义错误:
CREATE TABLE OrderDetail
(
OrderID INT
, ProductID INT
, Qty INT
, OrderDate DATETIME
, ShipDate DATETIME
, STATUS AS CASE
WHEN shipdate is NULL AND orderdate < DATEADD( dd, -7, GETDATE()) THEN 3
WHEN shipdate is NOT NULL THEN 2
ELSE NULL
END
, CONSTRAINT Chk_OrderDetails_Dates CHECK(
shipdate IS NOT NULL
OR orderdate < DATEADD( dd, -7, GETDATE())
)
)
GO
创建表OrderDetail
(
OrderID INT
,ProductID INT
,数量整数
,OrderDate日期时间
,发货日期时间
,情况如何
当shipdate为NULL且orderdate
或者可以使用触发器(而不是插入和更新)来仅允许日期有效的行。
就个人而言,我会使用检查约束—它更安全,更易于编写和维护。您不能从检查约束调用
RAISERROR
,但最接近您的想法可能是在插入/更新之前对该字段进行触发器检查,并在那里引发错误。