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

Konwersja nie powiodła się podczas konwersji wartości varchar w instrukcji case

Używając CASE instrukcji, wszystkie wyrażenia wynikowe muszą mieć ten sam typ danych. Jeśli nie, wynik zostanie przekonwertowany na typ danych o wyższym priorytecie. Według BOL :

Od INT ma wyższy priorytet typu danych niż VARCHAR , "Weeks" przekonwertować na INT co powoduje błąd:

Inny przykład, który spowoduje ten sam błąd:

SELECT CASE WHEN 1 = 1 THEN 'True' ELSE 0 END

Rozwiązaniem jest konwersja RS.intInterval do VARCHAR :

CONVERT(VARCHAR(10), RS.intInterval)

Twoje ostatnie zapytanie powinno brzmieć:

DECLARE @bFlag bit
SET @bFlag = 0
SELECT  something = CASE
                WHEN @bFlag = 1 THEN
                    CASE
                        WHEN RS.intInterval = 1 THEN '"Days"'
                        WHEN RS.intInterval = 2 THEN '"Weeks"'
                        WHEN RS.intInterval = 3 THEN '"Months"'
                        WHEN RS.intInterval = 4 THEN '"Years"'
                    END
                Else 
                    CONVERT(VARCHAR(10), RS.intInterval)
                End
from    MyTable  AS RS WITH (NOLOCK)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nie używaj sp_depends w SQL Server (jest przestarzałe)

  2. Serwer SQL wybiera różne wiersze, używając tylko najnowszych wartości

  3. Wszystko, co powinieneś wiedzieć o SQL Server JOINS

  4. Dodanie kolumny uniqueidentifier i dodanie wartości domyślnej do generowania nowego guid

  5. Połączyć SQL Server 2008 z kalendarzem programu Outlook?