Tôi đang đấu tranh với một thủ tục T-SQL và tôi hy vọng bạn có thể giúp đỡ.Thủ tục T-SQL đưa ra kết quả boolean
Tôi cần phải biết nếu
- Một hàng tồn tại trong một bảng cho một ID cho
- Nếu một (hoặc nhiều) không tồn tại thì một mới nhất đã ID khác thiết lập để 5.
Vì vậy, bảng đầu tiên chúng ta cần để có được hàng ra khỏi có hai ID có liên quan: CaseID và LocationID, đây là cả hai số nguyên. Bảng thứ hai có 1 ID có liên quan được gọi là StateID.
Hiện tại tôi có thể nhận được hàng tồn tại trong một phần bảng nhưng ngay sau khi tôi cố gắng làm bất cứ điều gì Trình quản lý doanh nghiệp đưa ra lỗi cú pháp trước câu lệnh END.
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
Có thể có cách để nhận được những gì tôi cần trong JOIN hoặc điều gì đó nhưng tôi là người mới hoàn thành ở đây.
Cách dễ nhất (hiểu) để kiểm tra StateID không phải là 5 và trả về kết quả là đúng/sai? (Tôi biết SQLServer không có kiểu boolean nhưng thay vào đó có kiểu Bit.)
Cũng theo một kiểu dáng: Các giá trị trong ID có trường văn bản liên kết với chúng - CaseEvents.StateID có văn bản 'Đã đóng' chẳng hạn. Tôi có nên trả về các giá trị làm ID và sau đó thay thế ID trong mã hoặc trả về các đối tượng có ID đã được thay thế bằng văn bản không? Sẽ không bao giờ có hơn 20 hoặc 30 kết quả được trả về trong một bộ và bảng sẽ không bao giờ rất lớn vì phải mất 5 năm để có được 2000 kết quả trong đó.
LƯU Ý: Không thể sử dụng LINQ (hoặc bất kỳ thứ gì khác .NETty) vì điều này sẽ được gọi từ chương trình VB6.
Cập nhật:
Chỉ có 1 trường hợp có thể được mở tại một thời điểm vì vậy chỉ mục gần đây nhất sẽ là sự phù hợp.
Các tình huống có thể có là:
- Không có trường hợp từng mở. Điều này sẽ trả về 0.
- Trường hợp đã được mở trước đó, nhưng hiện đã đóng. Điều này cũng nên trả về 0.
- Trường hợp đã mở tồn tại. Điều này sẽ trả về 1.
Trong trường hợp của tôi, bạn chỉ có thể có 1 trường hợp mở tại thời điểm đó để kiểm tra xem mục cuối cùng có phải là đóng cửa sẽ đủ trong trường hợp này hay không. Tôi nên lưu ý điều này trong mô tả vấn đề. –
Xin lỗi - tôi đoán tôi nên cụ thể hơn khi tôi nói "kiểm tra xem trường hợp cuối cùng có bị đóng hay không" - Đây không nhất thiết phải là lần gần nhất, thứ tự sẽ không cụ thể trừ khi bạn bao gồm một mệnh đề ORDER BY. –
Bạn là người đã làm việc thẳng ra khỏi hộp, vì vậy bạn nhận được đánh dấu ngay cả khi nó không phải là dễ hiểu nhất. –