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)
先判断删除存在的,再一次性插入不就完了么?
1、数据库表结构
所用数据库为Sql Server2008。
2、创建存储过程
(1)实现功能:
有相同的数据,直接返回(返回值:0);
有主键相同,但是数据不同的数据,进行更新处理(返回值:2);
没有数据,进行插入数据处理(返回值:1)。
根据不同的情况设置存储过程的返回值,调用存储过程的时候,根据不同的返回值,进行相关的处理。
你的问题描述的不是很清楚,这个存储过程触发的前提是什么,还有需要入参么,是全表修改还是只改一条记录 如果这个字段的值不存在呢?不存在是不是就直接更新赋值,那如果是这样的话为什么要用存储过程来做直接sql实现不是很好么
您好 ,您可以尝试在存储过程(函数中)使用条件判断语句,具体可以参考如下例子: 定义一个变量 c,当c小于50时候 执行某段代码
declare @c int
set @c=1
while @c<50
begin
执行代码...
end
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;
你的描述不是很清楚 也没有描述入参是什么类型 然后是什么样的数据之类的 我只是给你一个大概 给你做一个参考 希望对你有帮助
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
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)