2011-09-02 78 views
2

我正在创建一个存储过程,它根据查询设置3个变量,我必须返回它们的MAX值。我想不使用临时表而下面这样做让我Incorrect styntax near ')'SQL Server:是否有可能在不使用临时表的情况下在SELECT语句中UNION两个表?

SELECT MAX(PermissionID) 
FROM (SELECT @ContactPermission As PermissionID UNION ALL 
     SELECT @GroupPermission As PermissionID) 

我也曾尝试

SELECT MAX((SELECT @ContactPermission UNION ALL SELECT @GroupPermission)) 

错误,我得到的错误Cannot perform an aggregate function on an expression containing an aggregate or a subquery.

我也有尝试绕过变量并在子查询中使用UNION ...

SELECT MAX(PermissionID) 
FROM (SELECT PermissionID 
     FROM PermissionContact 
     WHERE ContactID = @ContactID 
     UNION ALL 
     SELECT PermissionID 
     FROM PermissionGroup 
     WHERE GroupID = @GroupID) 

这也给出了Incorrect syntax near ')'

任何想法或建议?临时表是我唯一的选择吗?

回答

3

你需要给你的派生表一个别名。

SELECT MAX(PermissionID) 
FROM (SELECT @ContactPermission As PermissionID UNION ALL 
     SELECT @GroupPermission As PermissionID) as T 
+0

如此简单和快速...由于一吨,我将在数分钟,所以当标记为答案让我。 – jon3laze

+3

+1也可以使用'SELECT MAX(PermissionID) FROM(VALUES(@ContactPermission, @GroupPermission))T(PermissionID)' –

1

或者只是使用一个case语句

Select Case When @ContactPermission > @GroupPermission 
     Then @ContactPermission Else @GroupPermission End PermissionID 

,或者

SELECT Case When c.PermissionID > g.PermissionId 
     Then c.PermissionID Else g.PermissionId End 
FROM PermissionContact c Cross Join PermissionGroup g 
Where c.ContactID = @ContactID 
    And g.GroupID = @GroupID 
相关问题