使用存储过程在一个表中输入新值时,自动将值添加到另一个表

时间:2013-11-15 20:46:00

标签: sql sql-server stored-procedures sql-server-2012

我有一个名为customer的表格,其中包含以下内容:

C_id| Acct_no| name| h_add| country| ph_no| company| sal| loan_no| balance|
  • loan_no = pK

表2:

bank_details2 loan_no| r_interest| loan_amt loan_date| time_yr| intrst
使用proc(成功)

自动计算

interest

我创建了另一个程序,在客户中添加贷款号时自动将loan_no添加到bank_details2。

create procedure proc_bank2 

as

begin

declare @p as int

--if 

select @p=loan_no from customer where loan_no not in (select loan_no from bank_details2)

return @@rowcount

if @@ROWCOUNT<>0

update bank_details2 set loan_no=@p

end

exec proc_bank2

虽然程序创建成功,但不会添加值。

有人可以指出我犯的错误/给出解决方案

3 个答案:

答案 0 :(得分:1)

当你使用Return时,每件事情都已完成,之后就不会被执行了。 所以试试这个:

create procedure proc_bank2 

as

begin

declare @p as int

--if 

select @p=loan_no from customer where loan_no not in (select loan_no from bank_details2)



if @@ROWCOUNT<>0

update bank_details2 set loan_no=@p
return @@rowcount
end

exec proc_bank2

答案 1 :(得分:1)

根据上面的答案,您的sp有多个问题:

select @p=loan_no from customer where loan_no not in (select loan_no from bank_details2)

将@p的值设置为它找到的最后一个不匹配的loan_no,无论客户如何。

update bank_details2 set loan_no=@p

没有where子句,因此会更新表中的每一行。我怀疑,但我不确定你真的想插入这里。

理想情况下,将loan_no添加到客户的proc应将其添加到bank_details2表中。如果不可能,则应该重写proc proc_bank2以接受在第一个proc调用时传递的参数loan_no。然后你可以检查这个loan_no并插入nesscessary。

答案 2 :(得分:0)

声明

return @@rowcount

返回,意味着它退出存储过程而不执行余数。删除它。