sql >> Databasteknik >  >> RDS >> Sqlserver

Kan du inte använda temporär kolumn i where-klausulen?

En lösning skulle vara att göra ett underval av hela påståendet och tillämpa where-satsen på resultatet

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

En annan lösning kan vara att upprepa hela satsen i WHERE-satsen

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

Eller så kan du testa varje enskilt fält för 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



  1. Effektiv paginering i SQL Server 2008 R2

  2. MySQL-databasdesign med internationalisering

  3. Förstå Oracles Java på Mac

  4. MySQL, vilket är effektivare longtext, text eller blob? Förbättrar skäreffektiviteten