sql >> Databáze >  >> RDS >> Sqlserver

SELECT CASE CAST Chyba převodu

Nemůžete míchat datové typy ve výrazech CASE (nebo alespoň bez ohledu na to, že budou implicitně předávat OK)

při konfrontaci s výrokem jako je následující SQL Server použije prioritu datového typu k určení, jaký by měl být celkový datový typ výrazu

SELECT CASE WHEN 1=1 THEN 'not-a-date' ELSE getdate() END

Pro výše uvedené datetime má vyšší prioritu než char takže implicitně přetypuje řetězec na datum, které selže.

Následující však uspěje jako sql_variant má vyšší prioritu

SELECT CASE WHEN 1=1 THEN cast('not-a-date' as sql_variant) ELSE getdate() END

Tímto způsobem tedy můžete vrátit více smíšených datových typů (nejsem si jistý, jak snadné je sql_variant je však třeba pracovat)

Jinak můžete vrátit NULL za neplatná data, místo vracení nesmyslných dat nebo přetypování všeho do řetězce, pokud to musíte vrátit.




  1. Vrácení hodnoty z příkazu INSERT v SQL Server 2008

  2. Vyberte sloupce indexu tabulky

  3. MVC4:UserIsInRole - Nelze se připojit k databázi SQL Server

  4. Obnovení materializovaného pohledu nezahrnuje přidaný sloupec