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

SQL Server 2008 przekazujący typ danych jako parametr funkcji

Cóż, nie ma TRY_CONVERT() lub TRY_CAST() w SQL-Server 2008, ale możesz użyć wewnętrznych rzutowań XML na typy dopuszczające wartość null.

Wypróbuj to

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;

Trochę hack... Ale jakoś pięknie;-)

Niektóre wyjaśnienia

CAST('' AS XML) to tylko sztuczka, aby uzyskać prawdziwy XML w celu skorzystania z natywnych metod XML. sql:column() jest XQuery -funkcja, która pozwala na dołączenie kolumny zestawu do XQuery (użyj sql:variable dla zmiennych).

cast as xs:int? spróbuje przeanalizować ciąg jako wartość typu int i zwróci NULL, jeśli to nie zadziała.

Limit jest następujący:to zawsze użyje ustawień domyślnych twojego systemu (podobnie do TRY_CAST ). Z TRY_CONVERT miałbyś większą kontrolę nad wyjściem z trzecim parametrem...

Podpowiedź:XQuery/Xpath jest ściśle rozróżniana wielkość liter. Więc jest xs:dateTime? , ale otrzymasz błąd z xs:datetime ...




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wysyłaj SMS-y za pomocą wyzwalaczy i procedur składowanych z SQL Server 2008

  2. Zapytania hierarchiczne w SQL Server 2005

  3. Jak napisać wynik instrukcji SQL do pliku CSV?

  4. Zbiorcze wstawianie częściowo cytowanego pliku CSV w programie SQL Server

  5. Skryptuj wszystkie dane z bazy danych SQL Server