SQL Azure では、 null 非許容の datetime 列を現在の時刻と単純に比較する2 つの計算列 (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
複数の結果セットを持つストアド プロシージャがあり、そのうちの 1 つがプルされます。
SELECT * FROM [dbo].[Stuff] WHERE [Guid] = @guid
最近、結果セットを で読み取るとSqlDataReader
、 でSqlDataReader.GetOrdinal("IsExpired")
失敗することがあるというエラー ログに気付きましたIndexOutOfRangeException
。前の列はコードの前の行でエラーなしで読み取られるため、そのような場合でも問題なく機能することを私は知っています。また、手順の結果セットは列名を共有していないため、適切な順序になっていると思います (そうしないと、以前の列を読み取ると同様に失敗します)。
また、ほとんどの場合、すべてが完全に機能しているように見えます。
これは、Azure の一時的な障害が原因である可能性がありますか?