在 SQL Azure 中,我或多或少地设置了一个表,其中包含两个计算列(IsExpired
和IsDeadlineExpired
),它们只是将不可为空的日期时间列与当前时间进行比较:
CREATE TABLE [dbo].[Stuff]
(
[StuffId] int NOT NULL IDENTITY(1,1),
[Guid] uniqueidentifier NOT NULL,
[ExpirationDate] datetime NOT NULL,
[DeadlineDate] datetime NOT NULL,
[UserId] int NOT NULL,
[IsExpired] AS CAST((CASE WHEN [ExpirationDate] < GETUTCDATE() THEN 1 ELSE 0 END) AS bit),
[IsDeadlineExpired] AS CAST((CASE WHEN [DeadlineDate] < GETUTCDATE() THEN 1 ELSE 0 END) AS bit),
CONSTRAINT [PK_StuffId] PRIMARY KEY ([StuffId]),
CONSTRAINT [UNQ_Guid] UNIQUE([Guid]),
)
GO
我有一个包含多个结果集的存储过程,其中一个拉取:
SELECT * FROM [dbo].[Stuff] WHERE [Guid] = @guid
我最近注意到错误日志表明有时当使用 读取结果集时SqlDataReader
,SqlDataReader.GetOrdinal("IsExpired")
使用IndexOutOfRangeException
. 我知道即使在这些情况下,前面的列也可以正常工作,因为它们是在前面的代码行中读取的,没有错误。我也相信该过程的结果集是按正确的顺序排列的,因为它们不共享列名(否则读取前面的列同样会失败)。
另外:大多数时候一切似乎都很完美。
这可以以某种方式归因于 Azure 瞬态故障吗?