Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Arithmetischer Überlauffehler für smallint-Datentyp

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von Chillazz, 24 September 2014.

  1. Chillazz

    Chillazz Benutzer

    Code:
    ALTER PROCEDURE [dbo].[Postleitzahlenmenge]
       
        @Monat smallint,
        @Jahr smallint
        AS
    BEGIN
     
        SET NOCOUNT ON;
    
        DECLARE @PLZMenge TABLE
            (MPLZ nvarchar(20),
            MTeilPLZ nvarchar(50),
            MMenge nvarchar(50),
            PMonat smallint,
            PJahr smallint)
           
    
        INSERT INTO @PLZMenge
        (MPLZ, MTeilPLZ, MMenge)
        SELECT
            [PLZ],
            [Artikel],
            SUM (Menge)
        FROM tmpImportAll
        WHERE Monat = @Monat
            AND Jahr = @Jahr
        GROUP BY       
            [PLZ],
            [Artikel]
        HAVING SUM([Menge]) <> 0
    
        DECLARE @PLZContact TABLE
        (CPLZ nvarchar(20),
            CAnz smallint)
    
        INSERT INTO @PLZContact
        (CPLZ, CAnz)
        SELECT [PostCode], COUNT([PKID])
        FROM [dbo].[tabKontakte], @PLZMenge
        WHERE [PostCode] like MPLZ + '%'
        GROUP BY [PostCode]
       
       
       
       
        DELETE [dbo].[tabUmsätze]
        WHERE Monat = @Monat
             and Jahr= @Jahr
    
        INSERT INTO [dbo].[tabUmsätze]
        (TeilPLZ, Menge)
        Select [CPLZ],[CAnz]
        From @PLZContact
    
    END
        
    Hallo Liebe Community ,

    habe mal wieder =) ein Problem bei SQL .

    Ich habe eine Stored Procedure wo nach dem durchlauf immer die Fehlermeldung
    Arithmetischer Überlauffehler für smallint-Datentyp, Wert = 44968.

    Habe mir alle Tabellen und Stored Proceduren , die in der Stored Procedure verarbeitet sind angeschaut also den Datentyp für die Spalte Postleizahl, wobei es sich hier handeln muss.
    Das entnehme ich wegen der 44968, und weil die Stored Procedure , ja die Postleitzahlen der gleichen Gebiete zusammen Zählen soll.

    Ich leider nur noch wo ich noch nach den Fehler suchen soll , vielleicht hat ja einer von euch eine Idee , oder Tipp .
    Lg Chillazz

    Code
     
  2. Hony%

    Hony% Datenbank-Guru

    smallint (32,767) ist zu klein für Postleitzahlen. Benutze dafür int als Datentyp.

    Gruß
    Hony
     
  3. ukulele

    ukulele Datenbank-Guru

    Also deine MPLZ hat den Dateityp NVARCHAR(20) und nicht SMALLINT. SMALLINT geht auch nur bis 32768, wäre also für PLZ ungeignet. Hat deine Zieltabelle eventuell andere Datentypen als deine Variablen?
     
  4. Chillazz

    Chillazz Benutzer

    Ne also habe alles kontrolliert, die haben alle nvarchar (20) als Datentyp
     
  5. ukulele

    ukulele Datenbank-Guru

    Du solltest deine Prozedur mal stückweise ausführen um die Anweisung zu finden die den Fehler hervorruft.

    Ist vieleicht die "Menge" Spalte in tmpImportAll ein SMALLINT? Dann wird auch die Summe davon als SMALLINT behandelt und könnte zu groß werden.
     
  6. Chillazz

    Chillazz Benutzer

    Ich werde es mal ausprobieren danke vorab ,melde mich sobald es was neues gibt
     
  7. Chillazz

    Chillazz Benutzer

    Also ich wollte mitteilen das ich es Fehler nicht mehr habe, der Witz ist habe einfach alles raus kopiert, dann einzeln durchlaufen lassen. Schließlich da nirgend wo ein Fehler erschien alles zusammen laufen lassen, und danach hat es geklappt XD.

    Freaky SQL
     
  8. akretschmer

    akretschmer Datenbank-Guru

    NEIN!

    Meine PLZ beginnt mit 0. Speichere das als INT und gebe es aus . Die 0 fehlt. FAIL.
     
  9. Chillazz

    Chillazz Benutzer

    Ich möchte kein neues Thema aufmachen , mein Problem bei der SP hier ist jetzt folgendes.

    In meiner end Tabelle Umsätze , müssen Folgende Spalten rein Postleitzahl und Menge was auch gemacht wird.
    Aber auch noch Monat , Jahr ,Produkt und eine der Name der Geschäfte.
    Das Problem ist aber das z.b die Geschäfte in keiner Tabelle gespeichert sind, sondern nur in einer SP angegeben werden.
    Kann man diese Trotzdem irgendwie angeben , das diese mit in die Tabelle kommen , also das ich auch Monat , Jahr und Geschäfte drin habe?

    LG Chillazz
     
  10. ukulele

    ukulele Datenbank-Guru

    Dann kriegst du wohl keine Post :) - Aber mal im ernst, im neuen PLZ System existiert meines wissens nach keine 4-stellige PLZ mehr. So gesehen ließe sich die 0 durch die Anwendung "errechnen" und die Daten wären wieder vollständig.

    @Chillazz Ich versteh kein Wort. Lass deine SP doch die "Geschäfte" in eine Tabelle schreiben?
     
  11. Chillazz

    Chillazz Benutzer

    :D sorry ich erkläre das wohl auch immer etwas blöd, ich schaue mal nach ob sich da irgend was ergibt.
    Sonst schreibe ich nochmal , natürlich besser Formuliert ;)
     
  12. Walter

    Walter Administrator Mitarbeiter

    Igitt. Daten sollen richtig sein. Punkt.
    (und nicht immer hasst Du die volle Kontrolle über die Daten, was ist mit Export etc)
     
  13. Hony%

    Hony% Datenbank-Guru

    Hast ja Recht. Davon abgesehen gibt es sowieso keinen Grund eine PLZ als Zahlenwert zu speichern. Jedenfalls wäre mir nicht bekannt, dass sich damit sinnvolle Berechnungen durchführen lassen.
     
  14. Chillazz

    Chillazz Benutzer

    Das Problem konnte ich Lösen , musste die anderen Spalten vorher auch angeben.

    Dafür läuft die Stored Procedure nicht mehr , ich habe das Problem das sich im Letzen Abschnitt eine schleife versteckt.
    Und ich immer die Fehlermeldung bekomme,das der Speicherplatz belegt ist .

    Code:
    INSERT INTO [dbo].[tabUmsatz]
        (NummerL,Artikel,PostleitZahl, Menge, Monat, Jahr)
        Select [MNummer],[MArtikel],[CPostleitZahl], [CAnz], @Monat, @Jahr
        From @Postleitzahlenmenge,@PostleitZahlenKontakte
    ich bin mir da nicht zu 100% , aber wenn ich aus zwei Tabellen was in einer Kopieren will , ist das doch so Richtig oder ?:confused:

    LG Chillazz
     
  15. ukulele

    ukulele Datenbank-Guru

    Nein. Du kannst deine beiden Quell-Tabellen per Join verbinden und das Ergebnis per Insert einfügen. Dafür brauchst du keine Variablen.
     

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden