2013-03-18 135 views
0

我在SQL Server 2008中的select语句时遇到了一些问题。我正在构建一个票务销售应用程序网站,我需要确保票据已经售出无法搜索。下面是我的存储SQL过程:使用SQL Server 2008检查表内是否存在ID

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**; 

我已经尝试了几个已经张贴在这里,如是否存在其他方法('表名,‘列名’)。有没有另一种方式来检查这个没有重新设计我的SELECT声明?

+0

假设这些座位都存储sowhere,您可以查询到他们,你会使用这样的事情: 何处存在(子查询) – 2013-03-18 22:03:15

+0

SeatIsActive是否指定它尚未销售? – 2013-03-18 22:12:54

+0

@ ron tornambe出于任何原因,我们需要禁用部分或特定座位,我不能让他们出现在我的搜索中。 – nate00234 2013-03-18 22:51:13

回答

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)。有没有任何方式引用座位ID而不将其声明为标量变量? WHERE SectionID = SectionID和SeatIsActive = 1 AND EXISTS(SELECT SeatID FROM OrderItems WHERE SeatID = SeatID); – nate00234 2013-03-18 23:06:10

+0

好吧,我编辑答案,它应该像你一样工作,并希望它。 – Justin 2013-03-19 06:52:00