我正在尝试编写一个检查特定值的存储过程,并返回错误或继续更新语句。我已经尝试过编写proc并且所有内容似乎都是语法上的声音,但是它似乎只检查某个值,当找不到它时,它似乎只是跳过需要发生的更新。我目前的代码如下:
declare @newID varchar = 099393
declare @oldID varchar = 260260
Declare @pMsg varchar(255)
if exists (select * from req where dept_id=@oldID)
begin
SET @pMsg = 'The department ID ' + @oldID + ' cannot be changed at this time.'
return
end
Begin Try
Begin TRAN
update dbo.dept
set dept_id = @newID
where dept_id = @oldID
COMMIT TRAN
END TRY
BEGIN CATCH
ROLLBACK TRAN
update dbo.dept
set dept_id = @oldID
where dept_id = @oldID
END CATCH
select dept_id=@newID
return
答案 0 :(得分:1)
你的整个Try-Catch块是没有意义的,并且在功能上等于以下
declare @newID varchar = 099393
declare @oldID varchar = 260260
declare @pMsg varchar(255)
if exists (select * from req where dept_id=@oldID)
begin
set @pMsg = 'The department ID ' + @oldID + ' cannot be changed at this time.'
return
end
update dbo.dept
set dept_id = @newID
where dept_id = @oldID
请注意;我删除了trailing dept id select和return关键字。你已经知道新的id了,为什么还要选择它。我已经离开了@pMsg赋值,因为我认为这是一个输出参数。
因此, dept update 无法工作的唯一原因(当req表中不存在旧id时)将是dept表中不存在旧id。
哇我多么愚蠢,没有发现你没有设置varchars的长度,所以newid和oldie的长度都是1,因此不会取指定的值099393和260260 强>
至少他们应该
declare @newID varchar(6) = 099393
declare @oldID varchar(6) = 260260