我现在已经忍受了两个小时了。我想选择或插入一条记录。如果记录存在,请选择其他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);
答案 0 :(得分:6)
您的案例缺少结束
Case when (something) then (Some)
else (another thing) end
无论如何,你的其他人必须返回一个选择,插入不会返回任何内容。 如果你想插入如果不存在然后返回插入的值(或返回,如果存在) 这样做:
INSERT INTO Domains(Domain_ID,Domain,Disabled,Description) VALUES(@Domain_ID,@Domain,@Disabled,@Description) where not exists (select 1 from Domains WHERE Domain = @domain);
SELECT Domain_ID FROM Domains WHERE Domain = @domain
如果不存在则插入,然后返回。如果已经存在,则不会插入,并返回值
2016年1月编辑
最后一个查询不适用于MySql
,它是MSSQL
语法
答案 1 :(得分:1)
如果没有对性能和缓存产生影响,如果Domain_ID是auto_increment
字段,那么实现所需特定结果的简单方法是使用ON DUPLICATE KEY
INSERT
子句声明:
INSERT INTO Domains
(fld1, fld2, fld3)
VALUES(....)
ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id);
请参阅ON DUPLICATE KEY UPDATE
MySQL documentation的尾部。
答案 2 :(得分:-1)
我看不到
If Not Exists(Select DomainId From Domains Where Domain = @domain)
Begin
INSERT INTO Domains(Domain_ID,Domain,Disabled,Description) VALUES(@Domain_ID, @Domain, @Disabled, @Description);
End
Select @DomainID
看来你似乎正在传递它,事实上我不明白为什么你需要它从查询中回来?