首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

两表联系关系更新的存储过程

2012-09-01 
两表关联更新的存储过程表A 结构如下:发送单位编号接收单位编号卡号是否已接收接收日期------------------

两表关联更新的存储过程
表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中更新过数据的"是否已读"字段更新为"未读"

谢谢
   


[解决办法]
不需要存储过程.

SQL code
update bset  单位编号 = a.单位编号 ,      是否已读 = '未读'from b , awhere b.卡号 = a.卡号update aset 接收日期 = getdate()from a , bwhere a.卡号 = b.卡号
[解决办法]
SQL code
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       未读*/ 

热点排行