都是中文引起的。
建议改为nvarchar(254)最好。declare @a varchar(5)
set @a = left('中国人民',4)
select @a
      
----- 
中国(所影响的行数为 1 行)declare @b nvarchar(5)
set @b = left('中国人民',4)
select @b
      
----- 
中国人民(所影响的行数为 1 行)

解决方案 »

  1.   

    应该改为:declare @YJTicketNo varchar(4000)一个中文占两个字节
      

  2.   

    马可,你说的将字段改成nvarchar(254)。可以成功执行。
    但是我想问问,我都系统已经运行很长时间了,这样修改,会不会引起其他的问题出现。比如对字段的赋值,取值等问题。
    因为这个表直接计算操作员的缴交的钱,一旦出现问题不好办。大力你说的改为这样不行的,问题不是定义的变量长度。但是如果将字段的长度改为4000就可以。
      

  3.   

    不行影响其他.只是注意存储宽度的问题:varchar是按字节存储的.nvarchar是按字存储的即varchar(254) 可以存储254个字母,127个汉字nvarchar(254) 无论存储字母还是汉字,都只能存储127个
      

  4.   

    varchar[(n)]长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节。所输入的数据字符长度可以为零。varchar 在 SQL-92 中的同义词为 char varying 或 character varying。
    nvarchar(n)包含 n 个字符的可变长度 Unicode 字符数据。n 的值必须介于 1 与 4,000 之间。字节的存储大小是所输入字符个数的两倍。所输入的数据字符长度可以为零。nvarchar 在 SQL-92 中的同义词为 national char varying 和 national character varying。