SQL存储过程IF EXISTS UPDATE ELSE INSERT
好.我早些时候已经得到了很多的帮助
here使用SQL后端到一个简单的…只是不为我(…时钟解决方案为我办公室的小办公室,所以我回来更多!
我目前正在使用的表包括6列: > clockDate date not null PK 我虽然已经从我的最后一个问题中弄清了我的IF NOT EXISTS INSERT ELSE UPDATE语句,但现在我试图在一个存储过程中使用它,而不是一个普通的查询窗口,没有成功. 基本上一个用户计时是一个没有脑子.但是,如果用户没有进入时钟,但是它们在午餐时间内停留,则语句需要创建该行而不是更新现有的行.好吧,这是我的存储过程: ALTER PROCEDURE dbo.BreakOut ( @userName varchar(50) ) AS IF EXISTS (SELECT * FROM Clock WHERE clockDate = GETDATE() AND userName = @userName) BEGIN UPDATE Clock SET breakOut = GETDATE() WHERE clockDate = GETDATE() AND userName = @userName END ELSE BEGIN INSERT INTO Clock (clockDate,userName,breakOut) VALUES (GETDATE(),@userName,GETDATE()) END 这是我的问题…如果用户DID时钟在一天我得到主键违规,因为存储过程仍然尝试运行语句的INSERT部分,并且永远不会运行UPDATE行.我试过它与一个IF不存在一样翻转同样的结果. IF-ELSE在存储过程中工作的诀窍是什么?可以这样做吗,我在想,还是要研究合并声明?我的计划是从每个工作站上的简单Visual Basic程序运行存储过程.也许我会在我的头上(为了坏我的老板太便宜,只是买一个时钟解决方案! 编辑: 感谢大家的帮助!!我爱上了这个网站,问题得到答案SO FAST !!!这是我的工作存储过程: ALTER PROCEDURE dbo.BreakOut ( @userName varchar(50) ) AS IF EXISTS (SELECT * FROM Clock WHERE DateDiff(dd,GetDate(),clockDate) = 0 AND userName = @userName) BEGIN UPDATE Clock SET breakOut = GETDATE() WHERE DateDiff(dd,clockDate) = 0 AND userName = @userName END ELSE BEGIN INSERT INTO Clock (clockDate,GETDATE()) END 这是正确的,还是可以改进?再次感谢所有这么多! 解决方法这可能是在这里的问题:WHERE clockDate = GETDATE()GetDate返回当前日期AND当前时间,这与clockDate不匹配.您可以将日期与DateDiff进行比较: WHERE DateDiff(dd,clockDate) = 0 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |