Bir T-SQL yordamıyla uğraşıyorum ve yardımcı olabileceğinizi umuyorum.Bir boole sonucu veren T-SQL yordamı
Ben Bir satır Belirtilen kimliğe
- eğer o zaman son birbirini kimlik 5.
Bu nedenle, satırdan çıkarmamız gereken ilk tablonun iki ilgili kimliği vardır: CaseID ve LocationID, bunlar her iki tam sayıdır. İkinci tablonun StateID adlı 1 ilgili kimliği vardır.
Şu anda satır bir tablo parçası var ama yakında bir şey yapmak için çalışırken Enterprise Manager SON deyimi önce sözdizimi hatası verip alabilirsiniz.
CREATE PROCEDURE [dbo].[HasActiveCase]
(
@LocationID INTEGER
)
AS
DECLARE @CaseID AS INTEGER
SELECT @CaseID=CaseID FROM dbo.Cases WHERE @LocationID=LocationID
SELECT CASE WHEN
@CaseID IS NULL
THEN
0
ELSE
-- do something here to check CaseEvents.StateID is not 5 (closed)
END
GO
muhtemelen bir JOIN veya bir şey gerek ama burada tam bir acemi neysem almanın bir yolu yoktur.
StateID'yi kontrol etmenin en kolay yolu (anlamak), 5 değil ve sonucu doğru/yanlış olarak döndürmektir? (Biliyorum SQLServer bir boole türü yok ama bunun yerine bir Bit türü var.)
Ayrıca bir stil konusuna da: ID'lerdeki değerlerin onlarla ilişkili bir metin alanı var - CaseEvents.StateID var örneğin 'Kapalı' metni. Değerleri ID olarak döndürmeli ve sonra kimliği kodda mı değiştirmeli yoksa kimlikleriyle birlikte nesneleri değiştirdiyseler mi? Hiçbir zaman bir sette 20 veya 30'dan fazla sonuç alınmayacaktır ve tablo, 2000 sonuçları elde etmek için 5 yıl aldığı için asla çok büyük olmayacaktır.
Not: linq (veya başka bir şey .NETty) kullanamazsınız, çünkü bu bir VB6 programından çağrılır.
Güncelleme:
sadece 1 vaka böylece yalnızca en son öğe alaka olacak bir anda açık olabilir. olması
olası durumlar geçerli:
- Hiçbir durumda hiç açtı. Bu 0 değerini döndürmelidir.
- Daha önce bir vaka açılmış, ancak şimdi kapalı. Bu da 0 değerini döndürmelidir.
- Açık bir durum var. Bu sizin için çalışır, bu 1.
okuduğumda daha sonra belirttim. Benim durumumda, o anda sadece bir tane açık durumda olabilirsiniz, bu yüzden son öğenin bir kapanış olup olmadığını kontrol etmek yeterli olacaktır. Bunu problem açıklamasında belirtmeliyim. –
Üzgünüm - sanırım "son durumun kapalı olup olmadığını kontrol et" dediğimde daha spesifik olmalıydım - Bu mutlaka en son değil, bir ORDER BY yan tümcesini açıkça içermedikçe, sipariş belirli olmayacaktır. –
Sizinki kutudan çıkmış olan sizdiniz, anlamanız en kolay olmasa bile kene olsun. –