Sql server TSQL-如何在插入之前根据不同列中的值检查值?
是否有一种方法可以实现一个检查约束,将同一表中不同列中的一个值与另一个值进行检查?具体来说,我希望在插入行之前确保要插入的“签出”日期值大于表中的“签入”日期值 我可能缺少一些详细信息,因此如果是这种情况,请告诉我。是的,MSSQL服务器(和其他服务器)允许-以便您可以比较列:Sql server TSQL-如何在插入之前根据不同列中的值检查值?,sql-server,database,check-constraints,Sql Server,Database,Check Constraints,是否有一种方法可以实现一个检查约束,将同一表中不同列中的一个值与另一个值进行检查?具体来说,我希望在插入行之前确保要插入的“签出”日期值大于表中的“签入”日期值 我可能缺少一些详细信息,因此如果是这种情况,请告诉我。是的,MSSQL服务器(和其他服务器)允许-以便您可以比较列: ALTER TABLE tbl ADD CONSTRAINT chkCheckout_GT_Checkin CHECK (Ckeckout > Checkin) 您可以使用如下支票: ALTER TABL
ALTER TABLE tbl ADD CONSTRAINT chkCheckout_GT_Checkin
CHECK (Ckeckout > Checkin)
您可以使用如下支票:
ALTER TABLE dbo.myTable ADD CONSTRAINT CK_myTable_CheckoutGreaterThanCheckin
CHECK (dbo.CheckDates()>1)
然后添加一个函数,如:
CREATE FUNCTION CheckDates()
RETURNS int
AS
BEGIN
DECLARE @retval int
SET @retval = (SELECT COUNT(*) FROM myTable WHERE checkout > checkin)
RETURN @retval
END;
这些可能无法按编写的方式工作(很抱歉,目前无法访问SQL引擎。)
或者,您可能希望在查询中包含检查,以便在检查失败时不必在代码中使用错误处理
如果您只是希望insert失败,可以将where子句扩展为如下内容:
INSERT INTO myTable (checkout)
VALUES(@checkout)
WHERE @checkout > @checkin AND IDcolumn = @IDcolumn
如果您想返回某种类型的指示器,表明存在问题,您可以使用类似于上面的方法,但可以添加SELECT@@ROWCOUNT,也可以使用预先检查值:
DECLARE @var int
SET @var = (SELECT count(*)
FROM myTable
WHERE @checkout > checkin AND IDcolumn = @IDcolumn)
@如果传递了值,则var将等于1。您可以尝试使用触发器。对扩展where子句进行了向上投票!比触发器更明显、更容易管理。