简体   繁体   中英

IF NOT EXISTS in mysql showing syntax error

I am trying to convert this tsql to mysql but showing error need help

  CREATE PROCEDURE FormAdd 

  @formName varchar(MAX)   
  AS  
  IF NOT EXISTS(SELECT * FROM tbl_Form WHERE formName=@formName)  
  BEGIN  
  INSERT INTO tbl_Form  
  (formName)  
  VALUES  
  (@formName)  
  SELECT @@identity  
  END  
  ELSE  
  BEGIN  
  SELECT  '-1'  
  END  

mysql

CREATE PROCEDURE FormAdd              
  (p_formName varchar(500)   )
  begin

  INSERT INTO tbl_Form (formName)  
  VALUES (p_formName)
   where NOT EXISTS(SELECT * FROM tbl_Form WHERE formName=p_formName)  ;

  SELECT Last_insert_id() as returnvalue ;

  SELECT  '-1'  ;
end

Your attempt was syntactically invalid because logically, an INSERT statement cannot contain a WHERE clause since it does not act on existing rows.

If the purpose is to insert only if the value for p_formname is not already present, then an appropriate step would be to define a unique index on that column first. Then, construct your procedure to attempt the insert and inspect the ROW_COUNT() value to see if one was inserted and act accordingly, returning -1 if not to adapt your existing T-SQL procedure.

First create the unique index on p_formname :

ALTER TABLE tbl_Form ADD UNIQUE KEY `idx_formName` (`formName`);

Then your procedure should use INSERT INTO...ON DUPLICATE KEY UPDATE to attempt to insert the row. Per the documentation, the value of ROW_COUNT() will be 0 if a new row was not inserted or 1 if it was.

CREATE PROCEDURE FormAdd (p_formName varchar(500))
BEGIN
  /* Attempt the insert, overwrite with the same value if necessary */
  INSERT INTO tbl_Form (formName) VALUES (p_formName) ON DUPLICATE KEY UPDATE formName = p_formName;

  /* Return the LAST_INSERT_ID() for a new row and -1 otherwise */
  SELECT 
    CASE 
      WHEN ROW_COUNT() = 1 THEN LAST_INSERT_ID() 
      ELSE -1
    END AS returnValue;
END

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM