sql >> Database teknologi >  >> RDS >> Sqlserver

Hvorfor cast/konvertere fra int returnerer en stjerne

For endnu mere sjov, prøv denne:

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

:)

Svaret på din forespørgsel er:"Historiske årsager"

Datatyperne INT og VARCHAR er ældre end BIGINT og NVARCHAR. Meget ældre. Faktisk er de i originalen SQL specifikationer. Også ældre er den undtagelsesundertrykkende tilgang til at erstatte output med stjerner.

Senere besluttede SQL-folkene, at det at kaste en fejl var bedre/mere konsekvent osv. end at erstatte falske (og normalt forvirrende) outputstrenge. Men af ​​hensyn til sammenhængen bibeholdt de den tidligere adfærd for de allerede eksisterende kombinationer af datatyper (for ikke at bryde eksisterende kode).

Så (meget) senere, da BIGINT- og NVARCHAR-datatyperne blev tilføjet, fik de den nye(re) adfærd, fordi de ikke var dækket af den ovennævnte grandfathering.



  1. Hvordan bruger man global midlertidig tabel i Oracle-proceduren?

  2. dbms_metadata.get_ddl virker ikke

  3. 50 Shades of Oracle Database Certificeringseksamen

  4. Openshift og net-ssh inkompatibilitet? (2.9.3-beta1 vs. 2.9.2)