尽管使用CAST,转换错误?

时间:2016-09-29 13:42:50

标签: sql sql-server tsql

我有一个光标从表中获取参考代码,如果符合某些条件,则将代码增加1。引用是字母数字,因此它被声明为nvarchar。

为了简单起见,假设@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功能。

1 个答案:

答案 0 :(得分:6)

错过了关闭括号,请按以下更改您的代码

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

如果@RefNo =' V1'

<强>输出:

enter image description here