gpt4 book ai didi

mysql - IF NOT EXISTS in mysql 显示语法错误

转载 作者:行者123 更新时间:2023-11-30 23:03:30 24 4
gpt4 key购买 nike

我正在尝试将此 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

数据库

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

最佳答案

您的尝试在语法上是无效的,因为从逻辑上讲,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

关于mysql - IF NOT EXISTS in mysql 显示语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22881020/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com