2013-03-18 4 views
0

У меня возникли небольшие проблемы с оператором select в SQL Server 2008. Я создаю веб-сайт приложения для продажи билетов, и мне нужно убедиться, что билеты, которые уже проданы не могут быть найдены. Вот мой SQL хранимая процедура:Проверка наличия идентификатора внутри таблицы с использованием SQL Server 2008

spGetSeatBySection 
    @SectionID int 
    AS 
    SELECT 
    [SeatID], 
    [SectionID], 
    [SeatName], 
    [SeatPrice], 
    [SeatDesc], 
    [SeatIsActive], 
    FROM [myDataBase].[dbo].[Seats] 
    WHERE SectionID = @SectionID 
    AND SeatIsActive = 1 
    AND **IF EXISTS CLAUSE**; 

Я попробовал несколько других методов, которые были размещены здесь, как и если существует ("имя_таблицы„column_name“). Есть ли другой способ проверить это без изменения моего заявления SELECT?

+0

Предполагая, что эти места будут сохранены sowhere, которые вы можете запросить для них вы бы использовать что-то вроде этого : WHERE EXISTS (подзапрос) –

+0

Не SeatIsActive не указано, что он не был продан? –

+0

@ ron tornambe по какой-либо причине нам нужно отключить раздел или конкретное место, я не могу заставить их появляться в моем поиске. – nate00234

ответ

0

Нечто подобное с EXISTS:

SELECT 
    [SeatID], 
    [SectionID], 
    [SeatName], 
    [SeatPrice], 
    [SeatDesc], 
    [SeatIsActive], 
    FROM [myDataBase].[dbo].[Seats] 
    WHERE SectionID = @SectionID 
    AND SeatIsActive = 1 
    AND EXISTS (SELECT o.SeatID 
       FROM OrderItems o 
       WHERE o.SeatID = [Seats].SeatID) 

Вы, вероятно, можно сделать и это:

 SELECT 
    s.[SeatID], 
    s.[SectionID], 
    s.[SeatName], 
    s.[SeatPrice], 
    s.[SeatDesc], 
    s.[SeatIsActive], 
    FROM [myDataBase].[dbo].[Seats] s 
     INNER JOIN OrderItems o ON o.SeatID = s.SeatID 
    WHERE s.SectionID = @SectionID 
    AND s.SeatIsActive = 1 
+0

Это то, что я искал, но единственная проблема в том, что я ссылаюсь на таблицу OrderItems, и мне нужно, чтобы предложение WHERE говорило SeatID = SeatID (хотя я не прошел в SeatID). Есть ли способ ссылки на идентификатор места без объявления его как скалярной переменной? WHERE SectionID = SectionID AND SeatIsActive = 1 И СУЩЕСТВУЕТ (ВЫБРАТЬ SeatID FROM OrderItems WHERE SeatID = SeatID); – nate00234

+0

Хорошо, я отредактировал ответ, он должен работать, как вы, и хотеть его. – Justin

Смежные вопросы