日期:2014-05-18  浏览次数:20756 次

复杂的存储过程-如何对SELECT出来的每条记录先进行判断再进行插入操作
各位朋友,有表1和表2,表1和表2结构分别如下:

表1:
姓名 编号 日期 卡号
张三 001 2007-1-1 卡号1
李四 002 2007-2-1 卡号2
黄五 003 2007-3-1 卡号3
张四 004 2007-4-1 卡号4
张五 005 2007-5-1 卡号5

表2:
姓名 卡号 备注

想实现的要求:
表1根据传进来的“姓名”,先从表1进行SELECT,然后将SELECT出来的每一条记录,用“姓名”和“卡号”作为条件,对表2进行判断,如果在表2里面,没有对应的记录,就将该记录插入到表2,否则就不插入。

例如:当表2为空的时候,用户传第一次传进来的条件是“where 姓名=张三”,那么该存储过程先从表1进行SELECT对应的条件,然后找到以下记录

姓名 编号 日期 卡号
张三 001 2007-1-1 卡号1
张四 004 2007-4-1 卡号4
张五 005 2007-5-1 卡号5

然后先将第一条记录的“姓名”和“卡号”取出来作为条件,然后对表2进行SELECT,“select * from 表2 where 姓名=张三 and 卡号=卡号1”,如果表2不存在该记录,就将这条记录插入到表2,然后继续对第二、第三。。。记录进行先判断再插入的操作。到最后,返回一个结果给用户,成功插入多少记录。

请问这个复杂伯存储过程该如何写呢?请各位朋友赐教,谢谢!!!



------解决方案--------------------
SQL code
--不用存储过程,一句话即可.
insert into 表2 select 表1.姓名,表1.卡号,备注='' from 表1 where cast(姓名 as varchar) + ',' + cast(卡号 as varchar) not in (select cast(姓名 as varchar) + ',' + cast(卡号 as varchar) from 表2)

------解决方案--------------------
其实这个问题有两个解决方法,一个是用触发器,另一个是用存储过程。你如果用存储过程,就按上面老兄的那个方法就写存储可以了。