加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQL存储过程IF EXISTS UPDATE ELSE INSERT

发布时间:2020-12-12 08:41:57 所属栏目:MsSql教程 来源:网络整理
导读:好.我早些时候已经得到了很多的帮助 here使用SQL后端到一个简单的…只是不为我(…时钟解决方案为我办公室的小办公室,所以我回来更多! 我目前正在使用的表包括6列: clockDate date not null PK userName varchar(50)not null PK 时钟(0) breakOut time(0) br
好.我早些时候已经得到了很多的帮助 here使用SQL后端到一个简单的…只是不为我(…时钟解决方案为我办公室的小办公室,所以我回来更多!

我目前正在使用的表包括6列:

> clockDate date not null PK
> userName varchar(50)not null PK
>时钟(0)
> breakOut time(0)
> breakIn time(0)
> clockOut time(0)

我虽然已经从我的最后一个问题中弄清了我的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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读