In SQL Azure fehlen, habe ich eine Tabelle mehr oder weniger wie diese aufgebaut, mit zwei berechneten Spalten (IsExpired
und IsDeadlineExpired
), die einfach vergleichen Nicht-Nullable-Datetime-Spalten auf die aktuelle Zeit:Berechnete Spalten von SELECT *
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
ich habe eine gespeicherte Prozedur mit mehreren Ergebnismengen, von denen ziehen:
SELECT * FROM [dbo].[Stuff] WHERE [Guid] = @guid
ich habe anzeigt Fehlerprotokolle vor kurzem festgestellt, dass manchmal, wenn die Ergebnismenge mit SqlDataReader
gelesen wird, SqlDataReader.GetOrdinal("IsExpired")
schlägt mit IndexOutOfRangeException
fehl. Ich weiß, dass die vorhergehenden Spalten auch in diesen Fällen gut funktionieren, da sie in den vorhergehenden Codezeilen ohne Fehler gelesen werden. Ich glaube auch, dass die Ergebnismengen von der Prozedur in der richtigen Reihenfolge sind, da sie keine Spaltennamen teilen (andernfalls würde das Lesen der früheren Spalten ähnlich fehlschlagen).
Auch: die meiste Zeit scheint alles perfekt zu funktionieren.
Kann dies irgendwie auf vorübergehende Azure-Fehler zurückzuführen sein?
Und noch ein weiterer Grund, der meine Wahl unterstützt, '' '' '' –
nicht zu verwenden, würde es, um explizite Spalten zu bearbeiten, vorzuziehen sein und würde es wahrscheinlich 100% funktionieren lassen, aber ich hätte nie erwartet, dass sich '*' so verhält. Ich habe es hauptsächlich gepostet, weil es so ein Nudelscratcher ist. –
Ja, es ist ziemlich merkwürdig. Wurden diese Spalten später hinzugefügt? –