2016-09-29 3 views
2

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.

+0

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. –

Antwort

6

Sie haben Fehlen schließende Klammer, Code der Linie

set @NewRefNo = Left(@RefNo, Len(@RefNo) - 1) + cast(@NewVersionNo as nvarchar) 
          -----------^ 

wie unten ändern, wenn @ RefNo = 'V1'

Ausgang:

enter image description here

+2

@Jaydip schöne Formatierung –

Verwandte Themen