2015-11-02 52 views
-1

我有一个错误:使用别名“情况下”在where子句

Invalid column name Temp

我想在where子句中使用的列Temp。我该怎么做?

ALTER PROCEDURE [dbo].[R_rpt1] 
     @ltt int 
    AS 
    BEGIN 
     SELECT ROW_NUMBER() OVER (ORDER BY YeuCauId) STT, a.name, 
       CASE WHEN a.tt = 0 THEN 0 
        WHEN (a.tt = 1 AND a.code IN (Select code from SCHEMAB.dbo.databaseB)) THEN 3 
        WHEN (a.tt = 1) THEN 1 
        WHEN a.tt=2 THEN 2 
        END as Temp 
     FROM ViewPhieuYeuCau a 
     WHERE Temp = @ltt 
    END 

回答

2

使用子查询:

ALTER PROCEDURE [dbo].[R_rpt1] 
    @ltt int 
AS 
BEGIN 
    SELECT * 
    FROM (
     SELECT ROW_NUMBER() OVER (ORDER BY YeuCauId) STT, a.name, 
       CASE 
        WHEN a.tt = 0 THEN 0 
        WHEN a.tt = 1 AND a.code IN (Select code from SCHEMAB.dbo.databaseB) THEN 3 
        WHEN a.tt = 1 THEN 1 
        WHEN a.tt=2 THEN 2 
       END as Temp 
     FROM ViewPhieuYeuCau a 
    ) t 
    WHERE Temp = @ltt 
END 

由于WHERE子句的SELECT之前首先执行,Temp尚未被WHERE条款的认可。要解决这个问题,你必须使用子查询。

Logical Processing Order of the SELECT statement

+0

非常感谢。 – MeosCoder