2012-04-19 49 views
1

有,我可以执行条件参加像这样的方式:的SQL Server +有条件加入

CREATE TABLE #Entity 
    ( 
    [AutoID] [int], 
    [Code] [nvarchar](50) NOT NULL, 
    ) 

    INSERT #Entity 
    EXEC Entity_GetEntitiesByUserId @UserID 

    DECLARE @Condition bit = 0 

    SELECT * FROM [Stuff] s 

     IF @Condition = 1 BEGIN 

     INNER JOIN 
     (
     SELECT Code as eCode from 
     #Entity 
     ) e 
     ON E.eCode = s.EntityCode 

     END 

     WHERE DeletedBy IS NULL 

感谢。

回答

7

这样做的逻辑你想要什么:

SELECT * 
FROM [Stuff] s 
WHERE 
DeletedBy IS NULL 
and (@Condition = 0 or s.EntityCode in (select E.code from #Entitye)) 
+3

我不认为这是意图。当@Condition = 1时,结果应该包含'#Entity'表中的列,不是吗?我认为你已经假定OP的代码读取,'SELECT s。* FROM [Stuff] s ...' – onedaywhen 2012-04-19 08:06:28

+1

@onedaywhen由于OP从第二个表中选择只有e.ecode,它是s.entitycode的副本,我认为这是一个公平的假设.. – Aprillion 2012-04-19 08:18:47

+0

刚才我观察到条件应该是'条件= 0或...' – 2012-04-19 08:40:09