Sql 更新未按预期工作

Sql 更新未按预期工作,sql,tsql,sql-server-2008-r2,Sql,Tsql,Sql Server 2008 R2,在我们的表中,有一个长度为nvarchar(70)的字段,用于存储可以使用子字符串查询的多个值。包括最终报价在内的字段中已经有54个字符 字段的开始字符和结束字符始终为单引号 我需要更新字段,从另一个引用表中添加最多3个字符。我尝试了下面的方法,但当数字大于9时,最后一个字符丢失了 update Hermes_Rep.dbo.ActData set spare6= LEFT(Spare6+space(56),55) + isnull(YAR.YARPEP,' ') + isnull(c

在我们的表中,有一个长度为nvarchar(70)的字段,用于存储可以使用子字符串查询的多个值。包括最终报价在内的字段中已经有54个字符

字段的开始字符和结束字符始终为单引号

我需要更新字段,从另一个引用表中添加最多3个字符。我尝试了下面的方法,但当数字大于9时,最后一个字符丢失了

update Hermes_Rep.dbo.ActData
set spare6= LEFT(Spare6+space(56),55) + 
    isnull(YAR.YARPEP,' ') + isnull(cast(YAR.YARSCOR as nvarchar(2)),'  ')
    + '''' 
FROM Hermes_Rep.dbo.ACTdata 
LEFT JOIN KFILDTO_YARPF YAR ON ACTdata.ACNo COLLATE Latin1_General_CI_AS= YAR.YARCUS COLLATE Latin1_General_CI_AS
WHERE DataDate= @ProcessDate 

例如,如果我正在添加的数据是
N9'
它可以工作,但是如果数据是
N11'
它只放入N1,那么我在这里做错了什么?

结果表明,问题是由
LEFT
函数截断字段引起的:

LEFT(Spare6+space(56),55) 
所以我把它改成了

LEFT(Spare6+space(57),57) 

现在它可以工作了。

您没有在这个查询中添加任何数据。这应该只是用空格填充现有的值。@GordonLinoff:对不起,我从SSMS bu MIRSE粘贴了错误的代码块。此表达式将初始字符串分段,最多2个字符
cast(YAR.YARSCOR as nvarchar(2))
well-Serg,这是引用表中该字段的最大大小。但我发现问题出在
左边(Spare6+空格(56,55)
,并更改了参数