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

Dlaczego przesyłanie/konwertowanie z int zwraca gwiazdkę

Aby uzyskać jeszcze więcej zabawy, wypróbuj ten:

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

:)

Odpowiedź na Twoje pytanie brzmi:„Przyczyny historyczne”

Typy danych INT i VARCHAR są starsze niż BIGINT i NVARCHAR. Dużo starszy. W rzeczywistości są w oryginalnym Specyfikacje SQL. Starsze jest również podejście polegające na eliminowaniu wyjątków polegające na zastępowaniu danych wyjściowych gwiazdkami.

Później ludzie zajmujący się SQL zdecydowali, że zgłoszenie błędu było lepsze/bardziej spójne itp. niż zastępowanie fałszywych (i zwykle mylących) ciągów wyjściowych. Jednak ze względu na spójność zachowali poprzednie zachowanie dla wcześniej istniejących kombinacji typów danych (aby nie złamać istniejącego kodu).

Tak więc (dużo) później, gdy dodano typy danych BIGINT i NVARCHAR, otrzymały nowe (er) zachowanie, ponieważ nie były objęte wspomnianym wyżej dziadkiem.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak uniknąć szkodliwego wpływu monitora aktywności na wydajność serwera SQL?

  2. Jak uzyskać wynik zmiennoprzecinkowy, dzieląc dwie wartości całkowite za pomocą T-SQL?

  3. BULK INSERT z kolumną tożsamości (auto-inkrementacja)

  4. Jak przypisać wynik exec do zmiennej sql?

  5. Łączenie aplikacji ASP.NET core z lokalną instancją SQLServer