好的 - 所以答案可能就是#Server;所有内容都在SQLServer'中的事务中。但这是我的问题。
我有一个存储过程,它根据一个输入参数返回数据。这是从外部服务调用的,我相信它是基于Java的。
我有一个日志表来查看每次点击此proc的时间。有点像这样(简化)......
TABLE log (ID INT PRIMARY KEY IDENTITY(1,1), Param VARCHAR(10), In DATETIME, Out DATETIME)
PROC troublesome
(@param VARCHAR(10))
BEGIN
--log the 'in' time and keep the ID
DECLARE @logid INT
INSERT log (In,Param) VALUES (GET_DATE(),@param)
SET @logid = SCOPE_IDENTITY()
SELECT <some stuff from another table based on @param>
--set the 'out' time
UPDATE log SET Out = GET_DATE() WHERE ID = @logid
END
到目前为止,SQL法西斯主义者如此轻易批评。
无论如何 - 当我这样称呼troublesome 'SOMEPARAM'
时 - 我得到了SELECT
的结果,并且在日志表中有一个很好的新行SOMEPARAM
和进出时间戳。
现在 - 我看这个表,即使没有行进入 - 如果我我要生成一行,我会看到ID跳过了很多地方。我猜这是由外部客户端代码命中它引起的。他们得到SELECT
的结果 - 但我没有得到他们的日志数据。
这告诉我,他们将客户电话打包在TRAN
并将其回滚。哪个一个会导致此行为。我想知道...
SELECT
的结果。)谢谢!