我正在尝试将此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的
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
答案 0 :(得分:0)
您的尝试在语法上无效,因为从逻辑上讲,INSERT
语句不能包含WHERE
子句,因为它不会对现有行执行操作。
如果目的是仅在p_formname
的值尚未存在时插入,则适当的步骤是首先在该列上定义唯一索引。然后,构建您的过程以尝试插入并检查the ROW_COUNT()
value以查看是否插入了一个并相应地执行操作,如果不调整现有的T-SQL过程,则返回-1
。
首先在p_formname
上创建唯一索引:
ALTER TABLE tbl_Form ADD UNIQUE KEY `idx_formName` (`formName`);
然后您的程序应使用INSERT INTO...ON DUPLICATE KEY UPDATE
来尝试插入行。根据文档,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