如果mysql中不存在,则显示语法错误

如果mysql中不存在,则显示语法错误,mysql,tsql,Mysql,Tsql,我正在尝试将这个tsql转换为mysql,但是显示错误需要帮助 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 @

我正在尝试将这个tsql转换为mysql,但是显示错误需要帮助

  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


您的尝试在语法上无效,因为从逻辑上讲,INSERT语句不能包含WHERE子句,因为它不作用于现有行

如果目的是仅在p_formname的值不存在时插入,则适当的步骤是首先在该列上定义唯一索引。然后,构造您的过程以尝试插入并检查是否插入了一个,并相应地执行操作,如果不调整现有的T-SQL过程,则返回-1

首先在p_formname上创建唯一索引:

然后,您的过程应该使用来尝试插入该行。根据文档,如果未插入新行,则ROW_COUNT的值为0,如果插入新行,则为1

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

您到底遇到了什么错误?INSERT INTO逻辑上没有WHERE子句。这就是您的错误所在吗?如果p_formname不存在,那么在tbl_表单中插入新行是正确的吗?yeah@MichaelBerkowski上面是mssql。。我正在尝试将其转换为mysql
ALTER TABLE tbl_Form ADD UNIQUE KEY `idx_formName` (`formName`);
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