sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server 2008 skickar datatyp som parameter för funktion

Tja, det finns ingen TRY_CONVERT() eller TRY_CAST() i SQL-Server 2008, men du kan använda XMLs interna casts till nullbara typer.

Prova detta

DECLARE @tbl TABLE(SomeInt VARCHAR(100));
INSERT INTO @tbl VALUES('123')
                      ,('blah') --bad data
SELECT t.*
      ,CAST('' AS XML).value('sql:column("t.SomeInt") cast as xs:int?','int')
FROM @tbl t;

Lite av ett hack... Men på något sätt vackert;-)

Någon förklaring

CAST('' AS XML) är bara ett knep för att få en riktig XML för att få användning av XMLs infödda metoder. sql:column() är en XQuery -funktion, som låter dig inkludera en uppsättnings kolumn i XQuery (använd sql:variable för variabler).

cast as xs:int? kommer att försöka analysera strängen som int-värde och returnerar NULL om detta inte fungerar.

Gränsen är:Detta kommer alltid att använda ditt systems standardvärden (liknande TRY_CAST ). Med TRY_CONVERT du skulle ha mer kontroll över utgången med den tredje parametern...

Tips:XQuery/Xpath är strikt skiftlägeskänslig. Så det finns xs:dateTime? , men du skulle få ett felmeddelande med xs:datetime ...




  1. Kan inte öppna databasen i läs/skrivläge

  2. MySQL-läsning från ström misslyckades

  3. Lösning för dynamiska satser i lagrade procedurer som anropas från utlösare

  4. kan inte ansluta till mysql med php