1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Error converting varchar to data type numeric - aber wieso?

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von thomar78, 16 November 2017.

  1. thomar78

    thomar78 Benutzer

    Hallo zusammen, ich habe den o.g. Fehler (8115...) mit folgender StoredProcedure

    ----
    DECLARE @ID nvarchar(50);
    DECLARE @Period nvarchar(6);
    DECLARE @Counter int;
    DECLARE @Column varchar(11);
    DECLARE @RunUpdate nvarchar(MAX);
    DECLARE @Value numeric(38,20);

    DECLARE MY_CURSOR CURSOR FOR
    SELECT DISTINCT ID FROM tableX
    OPEN MY_CURSOR
    FETCH NEXT FROM MY_CURSOR INTO @ID
    WHILE @@FETCH_STATUS = 0
    BEGIN

    SET @Counter = 1
    WHILE @Counter < 13
    BEGIN

    SELECT @Period = LEFT(CONVERT(varchar, DATEADD(month, -@Counter, GETDATE()),112),6)
    SET @Column = 'IB' + CAST(@Counter AS varchar)

    SELECT @Value = Value
    FROM tableY
    WHERE ID = @ID AND YYYYMM =
    (SELECT CASE WHEN EXISTS(SELECT YYYYMM FROM tableY WHERE (ID = @ID) AND (YYYYMM = @Period))
    THEN @Period WHEN EXISTS (SELECT MAX(YYYYMM) FROM tableY WHERE (ID = @ID) AND (YYYYMM < @Period))
    THEN (SELECT MAX(YYYYMM) FROM tableY WHERE (ID = @ID) AND (YYYYMM < @Period))
    ELSE '201001' END);


    SET @RunUpdate = 'UPDATE tableX SET ' + @Column + ' = ''' + @Value + ''' WHERE table.ID = ''' + @ID+ ''';';

    --EXEC sp_executesql @RunUpdate;

    INSERT INTO testtable VALUES (@ID, @Period, @Column, @Counter, @RunUpdate, @Value)
    (nur zum testen, welche Werte wann geliefert werden ...)

    SET @Counter = @Counter + 1
    END

    FETCH NEXT FROM PRJ_CURSOR INTO @ID

    END
    CLOSE MY_CURSOR
    DEALLOCATE MY_CURSOR
    ----

    und diese Zeile verursacht den Fehler, sobald ich die Variable @Value einsetze. Liefere ich einen beliebigen Wert den die eigentliche Abfrage (SELECT @VALUE...) zurückgeben würde, dann funktioniert es. Wenn ich die Zeile SET @RunUpdate... aus kommentiere und aus dem INSERT INTO testtable @RunUpdate raus nehme, dann stehen die zu erwartenden Werte in den verbleibenden Spalten der Tabelle testtable

    SET @RunUpdate = 'UPDATE tableX SET ' + @Column + ' = ''' + @Value + ''' WHERE table.ID = ''' + @ID+ ''';';

    Weiß hier jemand Rat?
     
  2. thomar78

    thomar78 Benutzer

    Hallo, mittlerweile habe ich selbst die Lösung gefunden. Sollte jemand auf dasselbe Problem stoßen... mit der fett-gedruckten Ergänzung läuft es wie gewünscht.

    SET @RunUpdate = 'UPDATE tableX SET ' + @Column + ' = @Value WHERE table.ID = ''' + @ID+ ''';';

    EXEC sp_executesql @RunUpdate, N'@Value numeric(38,20)', @Value;
     
Die Seite wird geladen...

Diese Seite empfehlen