这是我的"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