0

您好有更新表的程序。

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

现在想检查

if pswd <> @pswd
print 'error'

怎么做?当我在哪里有一个错误无效列之后写它时

4

3 回答 3

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'

您可能还想考虑使用RAISERRORor THROW(如果合适的话),而不仅仅是PRINT用于错误条件。

如果您需要对返回的特定行数做进一步的工作,您应该将它捕获在一个变量中并使用它 -每个语句都会导致@@ROWCOUNT重置。

于 2013-08-13T12:21:49.607 回答
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
于 2013-08-13T12:25:11.680 回答
0

你可以使用EXISTS()功能

IF EXISTS(SELECT * FROM myTbl WHERE id = @id and pswd <> @pswd)
BEGIN
    print 'error'
END 
于 2013-08-13T12:29:06.647 回答