SQL-在不使用游标的情况下检查表数据之间的一致性
我使用SQL,我有4个表SQL-在不使用游标的情况下检查表数据之间的一致性,sql,stored-procedures,cursor,Sql,Stored Procedures,Cursor,我使用SQL,我有4个表 tbl_项目(项目id为主键) tbl_任务(包含作为主键的任务id和作为外键的项目id) tbl_分配(包含分配\u id作为主键任务\u id作为外键) tbl_文档(包含文档id作为主键,分配id作为外键) 一个项目可以有一个或多个任务 一个任务可以有一个或多个赋值 一个assignemnt可以有一个或多个文档 现在我需要编写一个存储过程来验证项目并返回验证结果,其中项目id将作为参数传递 需要检查至少有一个任务的项目 此项目下的所有任务至少有1个任务分配 此
- 一个项目可以有一个或多个任务
- 一个任务可以有一个或多个赋值
- 一个assignemnt可以有一个或多个文档
是否有任何方法可以在不使用游标的情况下实现此逻辑此类型验证不需要游标。这里有三个查询可以执行此操作: 没有任务的项目:
select p.*
from tbl_projects p left outer join
tbl_tasks t
on p.project_id = t.project_id
where t.project_id is null;
任务至少有一个分配:
select p.*
from tbl_tasks t left outer join
tbl_assignments a
on a.task_id = t.task_id
where a.task_id is null;
所有作业至少有一个文档:
select p.*
from tbl_assignments a left outer join
tbl_documents d
on a.assignment_id = d.assignment_id
where d.assignment_id is null;
我不完全理解这个问题。这些类型的验证检查通常使用触发器而不是游标来完成。您是只想做一次检查,还是想继续验证?这将是一次。我将调用此SP检查特定项目是否有效。我不会在插入更新时验证它。你几乎。。。谢谢戈登。。。。我只需要检查与特定项目(我正在传递项目id)相关的任务/分配。因此,我认为我需要在所有语句中添加这个条件,以及在temp表中插入验证错误的逻辑。