2014-01-23 21 views
0

在一个存储过程中,我只想在一个查询中包含AND子句,只要满足一个特定的条件。动态AND子句

INSERT INTO #firstResults 
SELECT x, y, z FROM ep 
WHERE ep.proposedBy = @Id 
AND ep.pId IN (SELECT DISTINCT pId FROM #tempProj) 

只有当#tempProj不为空时,'AND'子句才应该加入。
什么是最优雅的方式来实现这个?

我在SQL服务器2008上。
由于这将重复多次proc,我希望避免分支IF语句。

回答

2

尝试......

AND (ep.pId IN (SELECT DISTINCT pId FROM #tempProj) 
       OR (SELECT COUNT(*) FROM #tempProj) = 0)) 
1
IF EXISTS (SELECT * FROM #tempProj) 
BEGIN 
    INSERT INTO #firstResults 
    SELECT x, y, z FROM ep 
    WHERE ep.proposedBy = @Id 
    AND ep.pId IN (SELECT DISTINCT pId FROM #tempProj) 
END 
ELSE 
    BEGIN 
    INSERT INTO #firstResults 
    SELECT x, y, z FROM ep 
    WHERE ep.proposedBy = @Id 
    END 
0
IF EXISTS (SELECT TOP 1 NULL FROM #tempProj) 
BEGIN 
INSERT INTO #firstResults 
SELECT x, y, z FROM ep 
WHERE ep.proposedBy = @Id 
AND ep.pId IN (SELECT DISTINCT pId FROM #tempProj) 
END 
ELSE 
BEGIN 
INSERT INTO #firstResults 
SELECT x, y, z FROM ep 
WHERE ep.proposedBy = @Id 
END