sql >> Database >  >> RDS >> Sqlserver

SQL Server 2008 geeft gegevenstype door als parameter voor functie

Welnu, er is geen TRY_CONVERT() of TRY_CAST() in SQL-Server 2008, maar u kunt de interne casts van XML naar nullable-typen gebruiken.

Probeer dit

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;

Beetje een hack... Maar op de een of andere manier mooi;-)

Enige uitleg

De CAST('' AS XML) is gewoon een truc om een ​​echte XML te krijgen om gebruik te maken van de native methoden van XML. De sql:column() is een XQuery -functie, waarmee u de kolom van een set kunt opnemen in de XQuery (gebruik sql:variable voor variabelen).

De cast as xs:int? zal proberen de string te ontleden als int-waarde en zal NULL teruggeven als dit niet werkt.

De limiet is:dit gebruikt altijd de standaardinstellingen van uw systeem (vergelijkbaar met TRY_CAST ). Met TRY_CONVERT je zou meer controle hebben over de output met de derde parameter...

Hint:XQuery/Xpath is strikt hoofdlettergevoelig. Dus er is xs:dateTime? , maar je krijgt een foutmelding met xs:datetime ...




  1. MySQL-paginering zonder dubbele query's?

  2. PHP PDO:kan geen verbinding maken, ongeldige catalogusnaam

  3. Ongeldige datetime-notatie:1292 Onjuiste datetime-waarde

  4. Kunnen we een mysql-query uitvoeren via de opdrachtprompt in Windows?