Я борюсь с процедурой T-SQL и надеюсь, что вы можете помочь.
Мне нужно знать, если
- В таблице существует строка для данного идентификатора
- Если один (или более) существует, то у самого последнего другой идентификатор установлен на 5.
Итак, первая таблица, из которой нам нужно получить строку, имеет два соответствующих идентификатора: CaseID и LocationID, оба являются целыми числами. Вторая таблица имеет 1 соответствующий идентификатор, называемый StateID.
В настоящее время я могу узнать, существует ли строка в части таблицы, но как только я пытаюсь что-либо сделать, Enterprise Manager выдает синтаксическую ошибку перед оператором 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
Возможно, есть способ получить то, что мне нужно в JOIN или что-то в этом роде, но я здесь новичок.
Какой самый простой (для понимания) способ проверки StateID - это не 5 и возвращение результата как true / false? (я знаю, что SQLServer не имеет логического типа, но имеет Тип бит вместо.)
Также по стилю: со значениями в идентификаторах связано текстовое поле - например, CaseEvents.StateID имеет текст «Закрыто». Должен ли я возвращать значения в качестве идентификаторов и затем заменять идентификатор в коде или возвращать объекты с идентификатором, уже замененным текстом? Никогда не будет более 20 или 30 результатов, возвращаемых в наборе и таблице никогда не будет очень большим, так как для получения 2000 результатов понадобится 5 лет.
ПРИМЕЧАНИЕ : Нельзя использовать linq (или что-либо еще .NETty), потому что это будет вызвано из программы VB6.
Обновление
Одновременно может быть открыт только 1 случай, поэтому релевантным будет только самый последний элемент.
Возможные ситуации:
- Ни одно дело не было открыто. Это должно вернуть 0.
- Дело было ранее открыто, но теперь закрыто. Это тоже должно вернуть 0.
- Открытое дело существует. Это должно вернуть 1.