求存储过程判断插入数据值并更新,数据量比较大,多谢

求存储过程判断插入数据值并更新,数据量比较大,谢谢!
本帖最后由 apllcode 于 2013-03-17 18:33:33 编辑

/*临时表tb1#
HNO SDate Cdate
HD2013030900030 2013/3/12 16:44 2013/3/13 18:00
HD2013030900034 2013/3/12 16:44 NULL
HD2013031100173 2013/3/13 21:33 2013/3/15 13:32
HD2013031100177 2013/3/13 21:33 NULL
HD2013031100177 2013/3/13 21:33 2013/3/15 13:32


原表TB1
HNO SDate Cdate
HD2013031100181 2013/3/13 21:33 2013/3/15 16:07
HD2013031100205 2013/3/14 11:03 2013/3/15 17:39
HD2013031100205 2013/3/14 11:03 2013/3/15 9:33
HD2013031100206 2013/3/14 11:03 2013/3/14 11:03
HD2013030900030 2013/3/12 16:44 2013/3/13 17:00
HD2013031100173 2013/3/13 21:48 2013/3/15 13:32
*/


把临时表数据插入到原表TB1中,插入时判断如果HNO的值已存就更新CDATE,CDATE,如果不存就直接插入,求存储过程,数据量很大.得出结果

/*HNO	SDate	Cdate
HD2013031100181 2013/3/13 21:33 2013/3/15 16:07
HD2013031100205 2013/3/14 11:03 2013/3/15 17:39
HD2013031100207 2013/3/14 11:03 2013/3/15 9:33
HD2013031100206 2013/3/14 11:03 2013/3/14 11:03
HD2013030900030 2013/3/12 16:44 2013/3/13 18:00  --此条原表本来已经存在,更新CDATE,CDATE
HD2013031100173 2013/3/13 21:33 2013/3/15 13:32  --此条原表本来已经存在,更新CDATE,CDATE
HD2013030900034 2013/3/12 16:44 NULL             --此条不存,直接插入
HD2013031100177 2013/3/13 21:33 2013/3/15 13:32  --此条不存,直接插入
*/

------解决方案--------------------
UPDATE A SET
   SDate = T.SDate    
   Cdate = T.Cdate 
FROM TB1 A,#TB1 T
WHERE A.HNO = T.HNO

INSERT INTO TB1(HNO,SDate,Cdate )
SELECT HNO,SDate,Cdate
FROM #TB1 T
WHERE NOT EXISTS (
SELECT 1 FROM TB1 A
WHERE A.HNO = T.HNO
)
------解决方案--------------------
判断语句建索引试试
------解决方案--------------------
哎,选册,再创建
Delete From 原TB1 Where HNO in(Select HNO From 临时表tb)

Insert INTO 原TB1(字段1,字段2...) Select 字段1,字段2..From 临时表tb