检查 table 存储过程中是否已存在两个值

check if two values already exists in table stored procedure

所以我正在尝试创建一个包含两个值的存储过程,但它必须检查是否已经存在包含这两个值的行,但是如何检查?

CREATE PROCEDURE `ChangeDashboardContent`(TestSuiteCollectionId varchar(45), Project varchar(45))
BEGIN
  /*Here it should check if these two values already exsists*/
  IF select * from dashboard_hidden where TestSuiteCollectionId = 
  TestSuiteCollectionId  and Project  = Project then end if and do nothing because they are already there.
  ELSE /*if this row doesn't exists implement it*/
  INSERT INTO dashboard_hidden(`TestSuiteCollectionId`,`Project`) 
  VALUES (TestSuiteCollectionId, Project);
  END IF;
END

如何使用 IF NOT EXISTS

CREATE PROCEDURE `ChangeDashboardContent`(TestSuiteCollectionId varchar(45), Project varchar(45))
BEGIN
  /*Here it should check if these two values already exsists*/
  IF NOT EXISTS (select * from dashboard_hidden where TestSuiteCollectionId = 
  TestSuiteCollectionId  and Project  = Project)
  BEGIN
     INSERT INTO dashboard_hidden(`TestSuiteCollectionId`,`Project`) 
     VALUES (TestSuiteCollectionId, Project);
  END 
 
END

对于这种情况,您可以使用 Exists 运算符

IF NOT EXISTS (SELECT 1 FROM dashboard_hidden where TestSuiteCollectionId = 
  TestSuiteCollectionId  and Project  = Project)
BEGIN

INSERT INTO dashboard_hidden(`TestSuiteCollectionId`,`Project`) 
  VALUES (TestSuiteCollectionId, Project);

END

以上将完成您的要求。但是,如果您的 table 中有这样的条件,因为两列应该具有唯一值,您可能会考虑添加唯一键约束。 SQL 如果两个值已经一起存在,那么将不允许任何插入,那么您不需要在存储过程中检查 If Exist。

ALTER TABLE dashboard_hidden
ADD CONSTRAINT UQ_SuiteCollection_Project UNIQUE (TestSuiteCollectionId,Project);