SQL函数总是返回错误的值

SQL函数总是返回错误的值,sql,constraints,sql-server-2016,Sql,Constraints,Sql Server 2016,我正在创建一个数据库来管理会议,并试图添加一个约束,以防止两个日期范围重叠。我的检查函数如下所示: create function DateOverlapping ( @ConferenceID int, @BeginDate date, @EndDate date ) returns bit as begin declare @valid bit = 1; if exists (select * from PaymentsThresh

我正在创建一个数据库来管理会议,并试图添加一个约束,以防止两个日期范围重叠。我的检查函数如下所示:

create function DateOverlapping 
(
    @ConferenceID int,
    @BeginDate date,
    @EndDate date
)
returns bit

as begin

declare @valid bit = 1;


if exists (select * 
            from PaymentsThreshold 
            where ConferenceID = @ConferenceID 
            and @BeginDate < ToDate and @EndDate > FromDate)
begin
    set @valid = 0; 
end 

 return @valid;
 end
然后我尝试将一些数据插入到一个ampty表中:

insert into PaymentsThreshold values(1, '2017-03-11', '2017-05-11', 0.2)

这会导致一个错误,关于为什么总是得到0。约束检查在添加行后完成。您只需针对刚才添加的行检查重叠,这将保证您将始终得到0,因为一行始终与自身重叠。您需要从检查中排除新添加的行。你想要ConferenceId@ConferenceId。这样,除了刚才添加的行之外,您可以检查与任何行的重叠

if exists (select * 
            from PaymentsThreshold 
            where ConferenceID <> @ConferenceID 
            and @BeginDate < ToDate and @EndDate > FromDate)
begin
    set @valid = 0; 
end 

是否可能在添加行后调用此函数?这可以解释为什么总是得到0。这个函数是如何被调用的?注意:SQL中没有@。可能正在使用一些类似SQL的产品?->>请将您的DBMS添加到标记中。我使用的是Microsoft SQL Server Management Studio 2016。我很想知道为什么在提出问题一个月后,投票被否决,而这个答案被接受了。
if exists (select * 
            from PaymentsThreshold 
            where ConferenceID <> @ConferenceID 
            and @BeginDate < ToDate and @EndDate > FromDate)
begin
    set @valid = 0; 
end