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

Mengapa cast/convert dari int mengembalikan tanda bintang

Untuk lebih menyenangkan, coba yang ini:

DECLARE @i INT
SET @i = 100
SELECT CAST(@i AS VARCHAR(2)) -- result: '*'
go

DECLARE @i INT
SET @i = 100
SELECT CAST(@i AS NVARCHAR(2)) -- result: Arithmetic overflow error

:)

Jawaban atas pertanyaan Anda adalah:"Alasan historis"

Tipe data INT dan VARCHAR lebih tua dari BIGINT dan NVARCHAR. Banyak lebih tua. Bahkan mereka dalam asli spesifikasi SQL. Yang juga lebih tua adalah pendekatan penekan pengecualian untuk mengganti output dengan tanda bintang.

Kemudian, orang-orang SQL memutuskan bahwa melempar kesalahan lebih baik/lebih konsisten, dll. daripada mengganti string keluaran palsu (dan biasanya membingungkan). Namun demi konsistensi, mereka mempertahankan perilaku sebelumnya untuk kombinasi tipe data yang sudah ada sebelumnya (agar tidak merusak kode yang ada).

Jadi (banyak) kemudian ketika tipe data BIGINT dan NVARCHAR ditambahkan, mereka mendapatkan perilaku baru karena tidak tercakup oleh pengecualian yang disebutkan di atas.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa yang dimaksud dengan ON [PRIMARY]?

  2. Perbaiki Msg 529 "Konversi eksplisit dari tipe data int ke xml tidak diizinkan" di SQL Server

  3. Panduan Lengkap untuk Memperbaiki Kesalahan Database SQL 5243

  4. Bagaimana saya bisa memasukkan 10 juta catatan dalam waktu sesingkat mungkin?

  5. Permintaan SQL untuk mendapatkan data selama 3 bulan terakhir