2016-09-29 75 views
2

我有一个游标,它从表格中提取参考代码,如果符合某些标准,则将代码加1。引用是字母数字,因此它被声明为nvarchar。尽管使用CAST,转换错误?

为了简单起见,假设@RefNo = 'v1',以改变这个打算V2:

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 

最后一行失败,错误Conversion failed when converting the nvarchar value 'v1' to data type int.在一定程度上我知道为什么发生这种情况 - 在“+”运算符不能同时处理nvarchar和int值 - 但我会认为在@NewVersionNo上强制转换为nvarchar会避免这种情况。

另请注意,我使用的是2008R2,因此无法使用CONCAT功能。

+0

你需要指定varchar的长度。它将使用30的默认长度。但是当然如果它是一个参数,默认值是1.保存你自己的麻烦并且明确。 –

回答

6

你有错过的地方右括号,改变你的代码行如下

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

@如果引用号= 'V1'

输出:

enter image description here

+2

@Jaydip很好的格式 –