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
...