2013-06-12 80 views
0

我有没有返回正确的结果的查询:不正确的查询结果

SELECT t.GroupName AS GroupName, t.ApplicationName AS ApplicationName, t.UserName 
     FROM UserApplication t 
     WHERE (@ApplicationName IS NULL OR @ApplicationName = '' OR t.ApplicationName = @ApplicationName) AND 
       (@UserName IS NULL OR @UserName = '' OR t.UserName= @UserName); 

表结构:

CREATE TABLE userapplication 
      (`ID` INT, 
      `ApplicationName` VARCHAR(100), 
      `GroupName` VARCHAR(100), 
      `UserName` VARCHAR(100)) 

当我不传递给参数的任何值,则它示出从所有行该表,而如果将任何值传递给参数@ApplicationName或@UserName它给我相同的结果。 请帮助

+0

第三行,在where clausal中输入'@ ApplicationNamee'与双'ee',看起来不正确! – stUrb

+0

对不起,错误的错误,我纠正 –

+1

请显示你如何传递参数的值 – peterm

回答

1

如果你正确设置用户变量的值的查询会工作得很好

SET @ApplicationName = 'App 1'; 
SET @UserName = ''; 

SELECT t.GroupName, 
     t.ApplicationName, 
     t.UserName 
    FROM UserApplication t 
WHERE (COALESCE(@ApplicationName, '') = '' 
    OR t.ApplicationName = @ApplicationName) 
    AND (COALESCE(@UserName, '') = '' 
    OR t.UserName= @UserName); 

这是你查询的多一点点的简洁版

这里是SQLFiddle演示

+0

感谢peterm它在查询窗口上工作,但它不能在我的报表查询窗口中以SET开头。是否有任何解决方案可以通过单个SELECT语句完成... –