1

我一直在尝试调试由触发器产生的一些有问题的数据库事务,并且在单步执行 T-SQL 时遇到了意外结果。通过从游标中获取值后FETCH NEXT FROM Updated_Cursor,我进入一个while循环,然后对于从游标中获取的每一行,我评估两个变量以确定在一些处理之后是否进行插入,如下所示:

WHILE @@FETCH_STATUS = 0
BEGIN
      IF (@first_indicator > 0 AND @second_indicator >0)
      BEGIN
              --processing and insert occurs here

在调试模式下,单步执行代码,我可以看到当这个条件的值评估为 true 时@first_indicator=1@second_indicator=0这对我来说没有意义。这会导致插入重复和错误的行。这两个变量是bit数据类型,我觉得这可能是相关的,但我不知道为什么会这样。

4

1 回答 1

1

将代码从光标中拉出时,如下所示:

DECLARE @f BIT = 1
DECLARE @s BIT = 0

IF(@f>0 AND @s>0) PRINT 'GH';

它按预期工作并且不打印。您确定在执行 if 语句时正在查看正确的变量吗?

IF此外,您在评论中提到的两个陈述并不等同。因此,我不确定您的实际问题是什么。

于 2013-02-12T14:43:15.337 回答