Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

SQL Server 2008 melewatkan tipe data sebagai parameter untuk fungsi

Tidak ada TRY_CONVERT() atau TRY_CAST() di SQL-Server 2008, tetapi Anda dapat menggunakan gips internal XML ke tipe nullable.

Coba ini

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;

Sedikit hack... Tapi entah kenapa cantik;-)

Beberapa penjelasan

CAST('' AS XML) hanyalah trik untuk mendapatkan XML asli untuk mendapatkan penggunaan metode asli XML. sql:column() adalah XQuery -fungsi, yang memungkinkan Anda untuk memasukkan kolom set ke dalam XQuery (gunakan sql:variable untuk variabel).

cast as xs:int? akan mencoba mengurai string sebagai nilai int dan akan mengembalikan NULL jika ini tidak berhasil.

Batasannya adalah:Ini akan selalu menggunakan default sistem Anda (mirip dengan TRY_CAST ). Dengan TRY_CONVERT Anda akan memiliki kontrol lebih besar atas output dengan parameter ketiga...

Petunjuk:XQuery/Xpath sangat peka huruf besar-kecil. Jadi ada xs:dateTime? , tetapi Anda akan mendapatkan kesalahan dengan 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. Antarmuka Jaringan SQL Server:String koneksi tidak valid [87]

  2. Konversi 'datetimeoffset' menjadi 'waktu' di SQL Server (Contoh T-SQL)

  3. Mengkueri data dengan menggabungkan dua tabel dalam dua database di server yang berbeda

  4. Objek Pendukung Diagram Basis Data tidak dapat Diinstal ... tidak ada pemilik yang valid

  5. Klausa WHERE menggunakan nilai yang bisa berupa NULL