Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Nie możesz użyć tymczasowej kolumny w klauzuli where?

Jednym z rozwiązań byłoby zrobienie podselekcji całej instrukcji, stosując klauzulę WHERE do jej wyniku

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

Innym rozwiązaniem może być powtórzenie całej klauzuli w klauzuli 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

Lub możesz przetestować każde pole pod kątem 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server:czy powinienem używać tabel information_schema zamiast tabel sys?

  2. Co to jest jednostka DTU w Azure SQL Database i jak określić, ile potrzebujemy

  3. Dapper.NET i przechowywany proc z wieloma zestawami wyników

  4. Tabela historii programu SQL Server — wypełnianie za pomocą SP lub wyzwalacza?

  5. Jak zabić wszystkie bieżące połączenia z bazą danych SQL Server 2005?