// *
WAP,它以deptno,dname作为输入, 将该记录插入到部门表中。
如果已经存在deptno,则增加 其值乘以10,然后再次尝试插入。 建议插入5次,然后 跌倒了5次,打印文字说 “稍后再试”
* //
Alter procedure sp_update (
@dno int,
@dname varchar(30)
)
as begin
declare @rowcount int
set @rowcount=@@ROWCOUNT
if @rowcount<5
begin
if not exists (select dno from dept where @dno=dno)
begin
insert into dept (dno,dname) values (@dno,@dname)
end
else
begin
print 'Try later'
end
end
else
begin
set @dno=(select max(dno) from dept)
set @dno=@dno+10
insert into dept (dno,dname) values (@dno,@dname)
end
end
exec sp_update 10,'HR'
请提供所需的输出。
答案 0 :(得分:0)
该过程开始时的@rowcount
变量始终为<5
,它永远不会进入“将其值增加10,然后再次尝试插入” 的段。
编辑:为了知道用户执行SP的次数,您必须将其插入日志表中,例如:
CREATE TABLE logSp (Username VARCHAR(200), ProcedureName VARCHAR(200), DateExecuted DATETIME)
并将逻辑更改为此:
ALTER PROCEDURE sp_update (
@dno int,
@dname varchar(30)
)
AS
BEGIN
DECLARE @sp_name VARCHAR(200) = 'sp_update'
DECLARE @maxtimes VARCHAR(200) = 5
DECLARE @user VARCHAR(200) = SUSER_NAME()
DECLARE @times INT
SELECT @times = count(1)
FROM logSp
WHERE Username = @user
AND ProcedureName = @sp_name
IF @times = @maxtimes
BEGIN
PRINT 'Try Again'
RETURN
END
ELSE
BEGIN
INSERT INTO logSp values (@user, @sp_name, GETDATE())
END
IF NOT EXISTS (SELECT dno FROM dept WHERE @dno=dno)
BEGIN
INSERT INTO dept (dno,dname) VALUES (@dno,@dname)
END
ELSE
BEGIN
SET @dno=(SELECT MAX(dno) FROM dept)
SET @dno=@dno+10
INSERT INTO dept (dno,dname) VALUES (@dno,@dname)
END
END
此外,通过将@dno
变量设置为max(id) + 10
,您可以保证
新的deptno不存在,您不必尝试5次。如果您想尝试5次插入,则必须使用while
。