TSQL-Arithmetischer überlauf mit BIGINT

Kann jemand klären für mich, warum erhalte ich eine Fehlermeldung, wenn ich versuche die variable @a in dem Beispiel unten?

DECLARE @a BIGINT
SET @a = 7*11*13*17*19*23*29*31
/*
ERROR:
Msg 8115, Level 16, State 2, Line 1
Arithmetic overflow error converting expression to data type int.
*/

Was ich herausfinden konnte bis jetzt, ist, dass, intern, SQL beginnt dabei die mathematische Auswertung der Multiplikation und der Platzierung der temporären Ergebnis in ein INT, dann wirft er es zu einem BIGINT.

Jedoch, wenn ich einen 1.0 * zu meiner Liste von zahlen, es gibt keine Fehler, von daher glaube ich, dass für diese Zeit-SQL verwendet schweben wie ein temporäres Ergebnis, dann warf Sie es auf BIGINT

DECLARE @b BIGINT
SET @b =   1.0  *  7*11*13*17*19*23*29*31
/*
NO ERROR
*/

Ehrlich gesagt, ich sehe nicht, nichts falsch mit dem code... es ist so einfach...

[ Ich bin mit SQL 2008 ]

[BEARBEITEN]

Nathan Dank für die link.
Das ist gute Informationen, die ich nicht kannte, aber ich verstehe immer noch nicht warum erhalte ich die Fehlermeldung und warum muss ich das tun "tricks", um ein einfaches Skript, wie diese arbeitet.

Ist es etwas, dass ich wissen sollte, wie man mit als Programmierer?

Oder das ein bug und wenn ja, ich betrachte diese Frage geschlossen.

  • Ich würde davon ausgehen, Sie sind richtig. Warum sollte SQL ableiten 7 ist eine bigint anstatt int?
  • Es schadet auch nicht, denke, es ist ein int, es denkt, es ist numeric(1,0).
  • Nathan, du hast Recht. Die Frage ist, warum bekomme ich eine Fehlermeldung. Warum nicht SQL-Zuordnung der richtigen Daten geben Sie, wenn benötigt???
InformationsquelleAutor leoinfo | 2011-02-16
Schreibe einen Kommentar