sql - 无法在 where 子句中使用临时列?

标签 sql sql-server sql-server-2008 sql-server-2005 tsql

select  cast(de.ApprovalOrder AS VARCHAR(32)) 
            + cast(de.EntityCode AS VARCHAR(32)) 
            + isnull(cast(de.DelegationCode AS VARCHAR(32)), '') as 'RowID' ,
            *
from    workflow.delegation_engine de
where   RowID <> NULL

当我尝试执行以下命令时,我收到错误:

Msg 207, Level 16, State 1, Line 13 Invalid column name 'RowID'.

只是想知道如何引用这个临时专栏?我搜索了之前的帖子,其中建议使用“having”,但这似乎也不起作用。

最佳答案

一种解决方案是对整个语句进行子选择,对其结果应用 where 子句

select  *
from    (
          select  cast(de.ApprovalOrder AS VARCHAR(32)) 
                  + cast(de.EntityCode AS VARCHAR(32)) 
                  + isnull(cast(de.DelegationCode AS VARCHAR(32)), '') as 'RowID'
                  , *
          from    workflow.delegation_engine de
        ) de 
where   de.RowID IS NOT NULL
<小时/>

另一种解决方案可能是在 WHERE 子句中重复整个子句

select  cast(de.ApprovalOrder AS VARCHAR(32)) 
        + cast(de.EntityCode AS VARCHAR(32)) 
        + isnull(cast(de.DelegationCode AS VARCHAR(32)), '') as 'RowID' ,
        *
from    workflow.delegation_engine de
where   cast(de.ApprovalOrder AS VARCHAR(32)) 
        + cast(de.EntityCode AS VARCHAR(32)) 
        + isnull(cast(de.DelegationCode AS VARCHAR(32)), '') IS NOT NULL
<小时/>

或者您可以测试每个单独的字段是否为 NULL

select  cast(de.ApprovalOrder AS VARCHAR(32)) 
        + cast(de.EntityCode AS VARCHAR(32)) 
        + isnull(cast(de.DelegationCode AS VARCHAR(32)), '') as 'RowID' ,
        *
from    workflow.delegation_engine de
where   de.ApprovalOrder IS NOT NULL
        AND de.EntityCode IS NOT NULL

关于sql - 无法在 where 子句中使用临时列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8611620/

相关文章:

sql - 首先运行 :joins or where clause

sql - mysql "group by"查询非常慢

sql - 相同表之间的 2 种不同类型的关系

sql - 如何在 SQL Server 中合并时间间隔

sql - 使用 OR 运算符 - SQL Server

asp.net-mvc - Entity Framework 和外键关系导致 SQL 性能降低

java - 如何避免 Java 中意外关闭 SQL 连接?

php - 在php中显示表中的数据

sql - 删除/忽略表中的重复记录并仅保留最早的记录

mysql - 如何向两个有关系的表中插入数据