我有一个名为customer的表格,其中包含以下内容:
C_id| Acct_no| name| h_add| country| ph_no| company| sal| loan_no| balance|
表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
虽然程序创建成功,但不会添加值。
有人可以指出我犯的错误/给出解决方案
答案 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
返回,意味着它退出存储过程而不执行余数。删除它。