Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
允许在SQL Server中使用查询不输入数据_Sql_Sql Server - Fatal编程技术网

允许在SQL Server中使用查询不输入数据

允许在SQL Server中使用查询不输入数据,sql,sql-server,Sql,Sql Server,用户输入两个数据,这是一个间隔周期,并作为INT存储在数据库中。 假设我有以下数据: Table :cheque_book_mcg id acc_no cheq_bk_no cheq_no_frm cheq_no_to sch_id no_from no_to 401 010000001 285 01029101 01029125 010 29101 29125 402 001000467 277 00130326

用户输入两个数据,这是一个间隔周期,并作为INT存储在数据库中。 假设我有以下数据:

Table :cheque_book_mcg

id   acc_no  cheq_bk_no cheq_no_frm cheq_no_to sch_id no_from       no_to
401 010000001 285      01029101     01029125    010   29101        29125
402 001000467 277      00130326     00130350    001   30326        30350
403 001000467 54       00122252     00122275    001   22252        22275
404 001000467 1149     00167551     00167575    001   67551        67575
405 003000016 45       00322301     00322325    003   22301        22325
406 001000468 46       00122326     00122350    001   22326        22350
407 001000470 335      00122401     00122425    001   22401        22425
408 001000471 848      00164651     00164675    001   64651        64675
409 001000471 1346     00145476     00145500    001   45476        45500
用户可以根据需要输入no_from和no_to间隔,这不是重复输入。 这样,在当前上下文中,用户可以输入no_from=1和no_to=10,然后如果 用户输入21和30也必须是有效的,而且两者之间有间隔,因此之后如果用户想要添加11和20中的数据,则应该是有效的,参考上述输入的数据,用户还可以输入剩余的间隔,在上表中,最高间隔为67551和67575,因此,用户还可以输入从67576开始的间隔,以此类推,用户还可以输入低于上述输入间隔的间隔以及输入数据之间缺少的间隔。但不应重复,间隔。我写了一个问题如下:

SELECT
CASE WHEN ((select MAX(id) from cheque_book_mcg WHERE no_to < 1) = (select MIN(id) from cheque_book_mcg WHERE no_from <= 20))
THEN
'yes'
ELSE
'no'
END as valid
这适用于输入表中可用数据之间的间隔,但不适用于低于先前输入间隔的较低间隔,也不适用于高于先前输入间隔的较高间隔

如何实现此目标???

您可以根据需要检查的范围的存在条件进行检查

if exists( select id from cheque_book_mcg 
           where ((@from_no between no_from and no_to) 
           or (@to_no between no_from and no_to)))
print 'no' -- already range exists, don't insert
else
print 'yes' -- no any range, can insert
当子句like时使用CASE

SELECT CASE WHEN exists( select id from cheque_book_mcg 
                         where ((@from_no between no_from and no_to) 
                         or (@to_no between no_from and no_to)))
            THEN 'no' ELSE 'yes' END as Valid

这样的触发器将防止为给定帐号插入重叠的支票号码范围:

CREATE TRIGGER PreventOverlappingChequeNumbers ON cheque_book_mcg 
FOR INSERT, UPDATE AS
BEGIN

    IF EXISTS(
        SELECT *
        FROM cheque_book_mcg cbm
        INNER JOIN inserted i
        ON ((cbm.no_from <= I.no_to AND i.no_from <= cbm.no_from)
        AND cbm.acc_no = i.acc_no))
    BEGIN
        RAISERROR('Cheque number ranges may not overlap', 16, 1)
        ROLLBACK
    END
END

是否要防止任何重叠范围?因此,如果存在范围1,20,那么应该拒绝范围11,30?我将尝试回答。我认为这是可行的,但问题是我需要将值“yes”或“no”返回到java代码,是否可以将“print”映射到java代码?您可以返回“yes”或“no”或任何1或0值而不是print。您正在使用存储过程吗?如果有存储过程,则在任何变量中保存是/否值,然后返回它否,我不使用存储过程。像我发布的查询一样,我可以使用ResultSet.getString1跟踪结果,是否可以进行“打印”?请在需要时用CASE检查我的更新答案。