एसक्यूएल Azure में से लापता है, मैं एक मेज और अधिक या कम इस तरह की स्थापना की, दो अभिकलन कॉलम (IsExpired
और IsDeadlineExpired
) कि बस वर्तमान समय में गैर-व्यर्थ datetime कॉलम तुलना के साथ है:गणना कॉलम कभी कभी चुनें *
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
के साथ विफल रहता है। मुझे पता है कि पिछले कॉलम उन मामलों में भी ठीक काम करते हैं, क्योंकि उन्हें बिना किसी त्रुटि के कोड की पिछली पंक्तियों में पढ़ा जाता है। मुझे यह भी विश्वास है कि प्रक्रिया से परिणाम सेट उचित अनुक्रम में हैं क्योंकि वे कॉलम नाम साझा नहीं करते हैं (अन्यथा पहले कॉलम पढ़ना इसी तरह असफल होगा)।
इसके अलावा: अधिकांश समय पूरी तरह से काम करने लगता है।
क्या यह किसी भी तरह से एज़ूर क्षणिक दोषों के लिए जिम्मेदार ठहराया जा सकता है?
और फिर भी एक और कारण मेरी पसंद समर्थन का उपयोग कभी नहीं करने के लिए '*' –
मैं मानता हूँ, यह दोबारा काम स्पष्ट स्तंभों का चयन के लिए बेहतर होगा और शायद यह 100% काम होगा, लेकिन मैं उम्मीद कभी नहीं '*' इस तरह व्यवहार करने के लिए। मैंने मुख्य रूप से इसे पोस्ट किया क्योंकि यह ऐसा नूडल-स्क्रैचर है। –
हाँ यह बल्कि अजीब है। क्या वे कॉलम तथ्य के बाद जोड़े गए थे? –