泡le沫
2017-12-21 06:42
采纳率: 90.9%
浏览 2.2k
已采纳

Sql Server2012 如何在存储过程中实现根据判断插入更新数据

目标表唯一字段:hrid,该字段不为空也不为NULL!图片说明
图片说明
通过存储过程插入数据时加入判断条件语句,判断结果hrid字段与数据源中有相同值时删除目标表相同数据(整条记录),在做插入!请各位大佬给出语句!存储过程如下
create procedure [dbo].[PACS_His_Report_insert] as
insert into PACS_His_Report (a,b,c,d....) select (a,b,c,d....) [192.168.0.18].pacs4all.dbo.His_Report a (nolock)
where a.RepDate > (select max(b.RepDate) from PACS_His_Report b)

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

7条回答 默认 最新

  • 喏喏_ 2017-12-21 08:01
    已采纳

    先判断删除存在的,再一次性插入不就完了么?

    点赞 评论
  • 无敌小贝神 2017-12-21 06:59

    1、数据库表结构

    所用数据库为Sql Server2008。

    2、创建存储过程

    (1)实现功能:

        有相同的数据,直接返回(返回值:0);
        有主键相同,但是数据不同的数据,进行更新处理(返回值:2);
        没有数据,进行插入数据处理(返回值:1)。 
    

    根据不同的情况设置存储过程的返回值,调用存储过程的时候,根据不同的返回值,进行相关的处理。

    点赞 评论
  • Ice166 2017-12-21 07:01

    你的问题描述的不是很清楚,这个存储过程触发的前提是什么,还有需要入参么,是全表修改还是只改一条记录 如果这个字段的值不存在呢?不存在是不是就直接更新赋值,那如果是这样的话为什么要用存储过程来做直接sql实现不是很好么

    点赞 评论
  • csdncsdn9876 2017-12-21 07:11

    您好 ,您可以尝试在存储过程(函数中)使用条件判断语句,具体可以参考如下例子: 定义一个变量 c,当c小于50时候 执行某段代码
    declare @c int

    set @c=1
    while @c<50
    begin
    执行代码...
    end

    点赞 评论
  • Ice166 2017-12-21 07:31

    BEGIN
    DECLARE my_hrid VARCHAR(3000);

    SELECT hrid INTO my_hrid FROM `youTableName` WHERE id = '传入的参数(你的描述不是很清楚,我只是给你提供思路)';
    
    -- 开始做判断 上面已经获取到了hrid的值
    IF '传入的参数' == my_hrid THEN
        RETURN 0;
    ELSEIF '传入的参数' != my_hrid THEN
        -- 开始更新操作
        UPDATE `youTableName` SET hrid = '传入的参数' WHERE `你的条件`;
        RETURN 2;
    ELSEIF  my_hrid IS NULL THEN
        -- 开始操作
        UPDATE `youTableName` SET hrid = '传入的参数' WHERE `你的条件`;
        RETURN 1;
    END IF;
    

    END;

     你的描述不是很清楚 也没有描述入参是什么类型 然后是什么样的数据之类的 我只是给你一个大概 给你做一个参考 希望对你有帮助
    
    点赞 评论
  • zhycy 2017-12-21 08:06

    create procedure [dbo].[PACS_His_Report_insert] as
    insert into PACS_His_Report (所有字段) select (所有字段) [192.168.0.18].pacs4all.dbo.His_Report a (nolock)
    where a.RepDate > (select max(b.RepDate) from PACS_His_Report b)
    and a.RecID<>a.RecID

    点赞 评论
  • 爱编程的老五 2017-12-21 08:17

    create procedure [dbo].[PACS_His_Report_insert] as
    delete from PACS_His_Report where hrid in (select hrid from [192.168.0.18].pacs4all.dbo.His_Report a (nolock))

    insert into PACS_His_Report (所有字段) select (所有字段) [192.168.0.18].pacs4all.dbo.His_Report a (nolock)
    where a.RepDate > (select max(b.RepDate) from PACS_His_Report b)

    点赞 评论

相关推荐 更多相似问题