如果存在MySql,请选择ELSE insert

如果存在MySql,请选择ELSE insert,mysql,sql,stored-procedures,Mysql,Sql,Stored Procedures,我已经为此痛苦了两个小时了。我想选择或插入一条记录。如果记录存在,请选择他的ID,否则请插入它并获取新的插入ID。目前,我正在尝试运行此操作,但仍会出现错误 SELECT CASE WHEN (SELECT COUNT(*) FROM Domains WHERE Domain = @domain)>0 THEN (SELECT Domain_ID FROM Domains WHERE Domain = @domain) ELSE INSERT INTO

我已经为此痛苦了两个小时了。我想选择或插入一条记录。如果记录存在,请选择他的ID,否则请插入它并获取新的插入ID。目前,我正在尝试运行此操作,但仍会出现错误

SELECT CASE WHEN (SELECT COUNT(*) FROM Domains WHERE Domain = @domain)>0 
THEN 
    (SELECT Domain_ID FROM Domains WHERE Domain = @domain) 
ELSE        
    INSERT INTO Domains(Domain_ID,Domain,Disabled,Description) VALUES(@Domain_ID,@Domain,@Disabled,@Description);

你的案子没有结束

Case when (something) then (Some)
else (another thing) end
无论如何,您的else必须返回select,insert不会返回任何内容。 如果要在不存在时插入,然后返回插入的值或在存在时返回 这样做:

如果不存在,将插入,然后返回。如果已存在,则不会插入,并返回值

2016年1月编辑


最后一个查询在MySql上不起作用,它是一个MSSQL语法,不会对性能和缓存产生影响,如果Domain_ID是一个自动增量字段,实现您想要的特定结果的简单方法是使用INSERT语句的on DUPLICATE KEY子句:

INSERT INTO Domains
    (fld1, fld2, fld3)
    VALUES(....)
ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id);

请参阅“关于重复密钥更新”的尾部部分。

为什么查询计数*?只需查询域匹配,如果有非空结果,则返回它,否则插入数据。您是否尝试在过程中执行此操作?我仍然掌握MySQL语法的诀窍,因此我不会将此作为答案发布,但我相信您希望类似于“如果存在,请从域中选择1=@domain…”。。。当从Domain=@Domain>0的域中选择COUNT*时,我没有选择CASE,而是尝试了if-else、if-exists之类的东西。。我最终得到了你看到的代码,我一直在插入时出错。。我知道我得到了一个答案,因为我不知道任何关于MySQL的事情,也不知道任何其他正在遭受这种痛苦的人。因为我对MySql了解不多,所以我决定使用简单的查询插入、选择、更新、删除和逻辑编程。我需要向数据库发出很多请求,因为我使用的是ASP.NET,我希望它不会太慢。好吧,如果这样做有意义的话,案例也应该在结尾之前有一个THEN。MySQL不支持进入。。。哪里
INSERT INTO Domains
    (fld1, fld2, fld3)
    VALUES(....)
ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id);