两表关联更新的存储过程
表A 结构如下:
发送单位编号 接收单位编号 卡号 是否已接收 接收日期
-----------------------------
0005 0001 50001 未接收 NULL
0006 0001 50002 未接收 NULL
0007 0001 50003 未接收 NULL
0002 0003 60001 未接收 NULL
0001 0005 80001 未接收 NULL
表B 结构如下:
卡号 单位编号 是否已读
---------------------------
50001 0005 已读
50002 0003 已读
50003 0008 已读
80001 0009 已读
问题:
如何用一存储过程以表A中"卡号"与表B中"卡号"相同的数据来更新表B中的"单位编号"(将表B中的"单位编号"更新为表A中的"接收单位编号"),同时更新表A中的"接收日期"为当前系统日期,"是否已接收"更新为已接收,并将表B中更新过数据的"是否已读"字段更新为"未读"
谢谢
[解决办法]
不需要存储过程.
update bset 单位编号 = a.单位编号 , 是否已读 = '未读'from b , awhere b.卡号 = a.卡号update aset 接收日期 = getdate()from a , bwhere a.卡号 = b.卡号
[解决办法]
SET NOCOUNT ONIF OBJECT_ID('TA')IS NOT NULL DROP TABLE TAGOCREATE TABLE TA(发送单位编号 VARCHAR(10),接收单位编号 VARCHAR(10),卡号 VARCHAR(10),是否已接收 NVARCHAR(10),接收日期 DATETIME) ----------------------------- INSERT TA SELECT '0005' , '0001', '50001' , N'未接收', NULL INSERT TA SELECT '0006' , '0001' , '50002' , N'未接收' , NULL INSERT TA SELECT '0007' , '0001' , '50003' , N'未接收' , NULL INSERT TA SELECT '0002' , '0003' , '60001' , N'未接收' , NULL INSERT TA SELECT '0001', '0005' , '80001', N'未接收' , NULL IF OBJECT_ID('TB')IS NOT NULL DROP TABLE TBGOCREATE TABLE TB(卡号 VARCHAR(10), 单位编号 VARCHAR(10), 是否已读 NVARCHAR(10)) --------------------------- INSERT TB SELECT 50001 ,'0005', N'已读' INSERT TB SELECT 50002 ,'0003' , N'已读' INSERT TB SELECT 50003 , '0008' , N'已读' INSERT TB SELECT 80001, '0009' , N'已读' IF OBJECT_ID('PROC_UPDTE')IS NOT NULL DROP PROC PROC_UPDTEGOCREATE PROC PROC_UPDTEASDECLARE @ERR INT SET @ERR=0BEGIN TRANUPDATE B SET 单位编号=A.接收单位编号,是否已读=N'未读' FROM TB B ,TA A WHERE B.卡号=A.卡号SET @ERR=@ERR+@@ERRORUPDATE A SET 接收日期=GETDATE(),是否已接收=N'已接收' FROM TB B ,TA A WHERE B.卡号=A.卡号SET @ERR=@ERR+@@ERRORIF @ERR=0 COMMITELSE ROLLBACKGOEXEC PROC_UPDTESELECT * FROM TASELECT * FROM TB/*发送单位编号 接收单位编号 卡号 是否已接收 接收日期---------- ---------- ---------- ---------- -----------------------0005 0001 50001 已接收 2009-02-11 19:07:12.9930006 0001 50002 已接收 2009-02-11 19:07:12.9930007 0001 50003 已接收 2009-02-11 19:07:12.9930002 0003 60001 未接收 NULL0001 0005 80001 已接收 2009-02-11 19:07:12.993卡号 单位编号 是否已读---------- ---------- ----------50001 0001 未读50002 0001 未读50003 0001 未读80001 0005 未读*/