为什么OUTPUT语句在插入IF子句内的表时在第二列返回null



这是我的"upstart"代码:

UPDATE LastTicket SET LastTicketNumber=LastTicketNumber+1
    OUTPUT INSERTED.LastTicketNumber WHERE CategoryId='1';
IF @@ROWCOUNT=0 INSERT INTO LastTicket (CategoryId,LastTicketNumber)
    OUTPUT INSERTED.LastTicketNumber VALUES ('1','2')

因此,当该行存在时,它会成功更新,OUTPUT会返回新的、递增的LastTicketNumber。

另一方面,当该行不存在时,sql server会成功地创建该行,并使用我传递给SqlCommand(1,2)的数据进行填充。因此,它创建了行,但返回null。毫无意义!为什么?为什么当我用"INSERTED.CategoryId"替换"INSERTED.LastTicketNumber"时,开始返回非空的类别id。为什么?如何归还我需要的东西?

该表只有这两列,并且这两列上都有非聚集的主复合键。

(MSSQL 2008)

如果表中不存在行,则批处理第一次运行时将返回两个结果集-第一个为空(因为没有行可更新),第二个包含插入的Id。

也许你看到的是第一个结果集,而不是第二个。

尝试以下操作:

DECLARE @t table (LastTicketNumber int)
UPDATE LastTicket SET LastTicketNumber=LastTicketNumber+1
    OUTPUT  INSERTED.LastTicketNumber INTO @t (LastTicketNumber) WHERE CategoryId='1';
IF @@ROWCOUNT=0 INSERT INTO LastTicket (CategoryId,LastTicketNumber)
    OUTPUT INSERTED.LastTicketNumber INTO @t (LastTicketNumber) VALUES ('1','2')
  select LastTicketNumber from @t

最新更新