更新检查t-sql

时间:2013-08-13 12:16:40

标签: sql sql-server

您有更新表的程序。

UPDATE myTbl
SET pswd = @newPswd
where id = @id and pswd = @pswd

现在想要检查

if pswd <> @pswd
print 'error'
怎么做?当我写错误无效列

之后

3 个答案:

答案 0 :(得分:1)

您可以使用@@ROWCOUNT计算前一个语句影响的行数:

UPDATE myTbl
SET pswd = @newPswd
where id = @id and pswd = @pswd
if @@ROWCOUNT = 0
    print 'Error - @id and/or @pswd didn''t match'

您可能还想考虑使用RAISERRORTHROW(如果适用)而不仅仅是PRINT来处理错误情况。

如果您需要继续使用返回的特定行计数,您应该在变量中捕获它并使用它 - 每个语句都会导致@@ROWCOUNT重置。< / p>

答案 1 :(得分:1)

您不能直接在if语句中调用列的名称。你需要将pswd的值设置为局部变量(与@pswd变量不同),然后比较两者。

 Declare @tempPswd varchar(20)
Select @tempPswd = pswd
From myTbl
Where id = @id

if (@tempPswd <> @pswd)
  Print 'Error....'
Else
Begin
  Update myTbl
  Set pswd = @newPswd
  Where id = @id and pswd = @pswd
End

答案 2 :(得分:0)

您可以使用EXISTS()功能

IF EXISTS(SELECT * FROM myTbl WHERE id = @id and pswd <> @pswd)
BEGIN
    print 'error'
END