'子查询在存储过程创建中返回多于1个值'ERROR

时间:2013-11-14 19:50:50

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

学习程序的概念和自己尝试某事的想法。

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

loan_amt

loan_date

time_yr

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

执行时
  

Msg 512,Level 16,State 1,Procedure proc_update1,Line 9

     

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

     

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

     

子查询返回的值超过1。这是不允许的   子查询跟随=,!=,<,< =,>,> =或当子查询用作   一种表达。 Msg 2705,Level 16,State 4,Procedure proc_update1,   第13行

我误解了什么???

1 个答案:

答案 0 :(得分: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