最初我认为此问题与C#TransactionScope
或Dapper.NET
有关。但是因为我已经在SSMS中测试了sql,问题仍然存在,我认为这是一个纯粹的SQL问题。
这是应该更新varchar(40)
列的(简化)更新。我没有收到任何错误,行数为1.旧SparePartDescription
为EC801/¦USB/Exch Acc/JP/PE bag
:
declare @rowCount int
UPDATE [tabSparePart] SET
[SparePartDescription] = 'EC801/╡USB/Exch Acc/JP/PE bag'
WHERE ([idSparePart] = 13912)
set @rowCount = @@ROWCOUNT
select @rowCount
唯一的区别是这些特殊字符:╡
和¦
。
也许您已经知道为什么我无法更新此专栏。
答案 0 :(得分:4)
嗯,你正在使用的特殊角色:
╡
ASCII不支持。参见:
DECLARE @x VARCHAR(32) = 'EC801/╡USB/Exch Acc/JP/PE bag';
SELECT @x;
结果:
EC801/¦USB/Exch Acc/JP/PE bag
所以更新工作正常,从技术上讲,它只是没有做你想要的,因为为了适应ASCII空间,它必须用你的角色代替有效的角色。
为了支持该字符,您必须为您的列使用Unicode(可能是特定的排序规则,我不确定)。这很好用:
DECLARE @x NVARCHAR(32) = N'EC801/╡USB/Exch Acc/JP/PE bag';
SELECT @x;
结果:
EC801/╡USB/Exch Acc/JP/PE bag
在包含此类字符的字符串文字中指定N
前缀非常重要...