Error converting varchar to data type numeric - aber wieso?

thomar78

Benutzer
Beiträge
8
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?
 
Werbung:
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;
 
Zurück
Oben