学习程序的概念和自己尝试某事的想法。
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行
我误解了什么???
答案 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