0

学习程序的概念,并想自己尝试一些事情。

1)我有一个表有foll列loan_no
r_interest

贷款金额

贷款日期

时间_年

2)

我创建了一个程序

create procedure proc_update1

as
begin
 declare @interest as decimal

declare @rate as int

declare @p as int

declare @n as int

set @rate=(select r_interest from bank_details)

set @p=(select loan_amt from bank_details)

set @n=(select time_yr from bank_details)

set @interest =(@p*@n*@rate)/100

alter table loan_details add interest1 decimal

update loan_details set interest1=@interest

end

3)当我执行使用exec proc_update1

消息 512,级别 16,状态 1,过程 proc_update1,第 9 行

子查询返回超过 1 个值。当子查询跟随 =、!=、<、<=、>、>= 或子查询用作表达式时,这是不允许的。消息 512,级别 16,状态 1,过程 proc_update1,第 10 行

子查询返回超过 1 个值。当子查询跟随 =、!=、<、<=、>、>= 或子查询用作表达式时,这是不允许的。消息 512,级别 16,状态 1,过程 proc_update1,第 11 行

子查询返回超过 1 个值。当子查询跟随 =、!=、<、<=、>、>= 或子查询用作表达式时,这是不允许的。消息 2705,级别 16,状态 4,过程 proc_update1,第 13 行

我有什么误解吗???

4

1 回答 1

0

编辑:我误解了这个问题。您有一张包含贷款金额、时间和利率的表格。您在某个表中有一列,无论是原始表还是新表。您可以使用以下查询更新行。

UPDATE loan_details
SET interest1 = 
    (
    SELECT (loan_amt*time_yr*r_interest)/100 AS 'interest'
    FROM bank_details
    )

但是,您应该有一个主键,以便您可以添加:

WHERE loan_details.Account = bank_details.AccountId

如果要在可重用存储过程中添加列,则必须先检查该列是否已经存在,然后再继续。您可以通过查询 sys.columns 来做到这一点。如果该列不存在,则将其添加。如果该列不存在,则不会发生任何事情。无论如何,您将继续使用您的 UPDATE loan_details。

IF EXISTS
    (
    SELECT * FROM sys.columns
    WHERE Name = N'columnName' AND OBJECT_ID = OBJECT_ID(N'tableName')
    )
BEGIN
    ALTER TABLE MyTable
    ADD NewColumn1 INT DEFAULT 1
END  
于 2013-11-14T19:58:12.780 回答