Sql 基于函数的检查约束

Sql 基于函数的检查约束,sql,tsql,Sql,Tsql,对于类分配,我们有以下场景: “我们发现一些员工预订的活动场地无法满足预期的活动出席人数。最糟糕的是,有500人参加一个最多只能容纳200人的活动。我们需要添加一个限制,以防止这种情况发生。要测试您的限制,请添加以下两个活动。” 我们被指示使用一个函数和一个利用该函数输出的检查约束。这是我迄今为止最好的一次尝试: CREATE FUNCTION f_nfp_venues_max_capacity ( @event_exp_attendance int, @event_venue_id i

对于类分配,我们有以下场景:

“我们发现一些员工预订的活动场地无法满足预期的活动出席人数。最糟糕的是,有500人参加一个最多只能容纳200人的活动。我们需要添加一个限制,以防止这种情况发生。要测试您的限制,请添加以下两个活动。”

我们被指示使用一个函数和一个利用该函数输出的检查约束。这是我迄今为止最好的一次尝试:

CREATE FUNCTION f_nfp_venues_max_capacity
(
  @event_exp_attendance int,
  @event_venue_id int
)    
RETURNS bit
AS
BEGIN
DECLARE @ResultBit BIT = 1
IF @event_exp_attendance > (SELECT venue_max_capacity FROM nfp_venues WHERE @event_venue_id = venue_id)
  SELECT @ResultBit = 0
RETURN      @ResultBit

END


ALTER TABLE nfp_events
  ADD
    CONSTRAINT ck_event_venue_capacity CHECK
       (([dbo].[f_nfp_venues_max_capacity] (event_exp_attendance)=(1)))
我在尝试执行约束时出现以下错误:

Msg 313, Level 16, State 2, Line 1
An insufficient number of arguments were supplied for the procedure or function dbo.f_nfp_venues_max_capacity.

任何帮助都将不胜感激。

在约束中调用函数时,缺少一个必需的参数。您还需要在约束中传递
事件\u场馆\u id

[dbo].[f_nfp_venues_max_capacity] (event_exp_attendance, event_venue_id) 

正如错误消息所示。

。检查约束方法非常脆弱。例如,如果在场馆表中更改了场馆容量,则不会触发。因此可能允许存在违反规则的数据。@如果有违反更改的活动,MartinSmith不会拒绝降低场馆容量,需要检查场馆表中的场馆容量>=现有的活动容量吗?或者这可以由您使用的索引视图处理吗?@jpw索引视图将自动处理两侧。您可以在then Vinces表上创建另一个检查约束,但可能还有其他方法失败。@MartinSmith很高兴知道。你在另一个问题上的态度确实很坚定,对我来说是新的;学习新技巧总是好的。