Mik*_*sdf 9 sql azure azure-sql-database
在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
Run Code Online (Sandbox Code Playgroud)
我有一个包含多个结果集的存储过程,其中一个结果集:
SELECT * FROM [dbo].[Stuff] WHERE [Guid] = @guid
Run Code Online (Sandbox Code Playgroud)
我最近发现表明,有时当结果集读取错误日志SqlDataReader,SqlDataReader.GetOrdinal("IsExpired")失败IndexOutOfRangeException.我知道前面的列甚至在这些情况下工作正常,因为它们在前面的代码行中被读取而没有错误.我也相信程序的结果集是按正确顺序排列的,因为它们不共享列名(否则读取前面的列同样会失败).
另外:大多数时候一切似乎都很完美.
这可以归因于Azure瞬态故障吗?
查看一些旧日志,得出的结论是,只有在同时部署 DACPAC 的同时运行查询时才会发生此错误(作为我们对此特定测试环境的自动化部署的一部分)。
我假设架构在 DACPAC 部署期间不一定处于可靠状态。
从那时起,我们添加了一些代码,以便在部署期间将应用程序置于“维护模式”(甚至是这些自动化的)。这似乎可以缓解这个问题。
| 归档时间: |
|
| 查看次数: |
534 次 |
| 最近记录: |