Ich habe einen Cursor, der Referenzcodes aus einer Tabelle holt und den Code um eins erhöht, wenn er bestimmten Kriterien entspricht. Die Referenz ist alphanumerisch und wird daher als nvarchar deklariert.Konvertierungsfehler trotz Verwendung von CAST?
Um die Dinge einfach zu halten, nehme an, dass @RefNo = 'v1'
, mit der Absicht, diese zu v2 Wechsel:
DECLARE @versionNo INT
DECLARE @RefNo nvarchar(50)
DECLARE @NewVersionNo INT
DECLARE @NewRefNo nvarchar(50)
set @VersionNo = Right(@RefNo, 1)
set @NewVersionNo = @versionNo + 1
set @NewRefNo = Left(@RefNo, Len(@RefNo - 1)) + cast(@NewVersionNo as nvarchar)
print @NewRefNo
Die letzte Zeile wird mit Fehler Conversion failed when converting the nvarchar value 'v1' to data type int.
In einem Ausmaß mir, warum dies geschieht - die ‚+‘ Der Operator kann nvarchar und int-Werte nicht gleichzeitig verarbeiten - aber ich hätte gedacht, dass die Umwandlung in nvarchar auf @NewVersionNo das vermieden hätte.
Beachten Sie auch, dass ich 2008R2 verwende, so dass ich die CONCAT-Funktion nicht verwenden kann.
Sie müssen die Länge von varchar angeben. Es wird die Standardlänge von 30 verwendet. Aber natürlich, wenn es ein Parameter wäre, wäre der Standardwert 1. Sparen Sie sich den Ärger und seien Sie explizit. –