你检查一下你 正式表(msg) 的字段看看是不是类型长度不兼容

解决方案 »

  1.   

    正式表(msg) 的类型:VARCHAR(10)
      

  2.   

    create table a(i varchar(100))
    gocreate proc proc_add4  @MSG VARCHAR(1000)
    as
    DECLARE @OKMSG VARCHAR(100),@n int
    select @n=0
    WHILE LEN(@MSG)>=@n*10
    BEGIN
    SET @OKMSG=SUBSTRING(@MSG,@n*10+1,10)
    --SET @MSG=REPLACE(@MSG,@OKMSG,'')
    INSERT INTO a(i) values(@OKMSG)
    select @n=@n+1
    END
    exec proc_add4 '我们啊啊啊啊阿啊aaaa啊啊啊阿啊啊啊啊aaa爱情Z'
    go
    select * from a
    在数据库里面汉字和字母多是占1位得
      

  3.   

    aierong(皑婀瑢-数据库XML.NET联盟会处长) 的办法是好,但是也需要把a(i)长度设为100才行啊,如果长度是10也是回出同样错误的
      

  4.   

    DECLARE @MSG VARCHAR(1000),
    @OKMSG VARCHAR(10) --此处应该字段长度DECLARE @Position intSET @MSG = 'ABCDEFG中国认突然他HIJKL认突然他MNOP回家QRSTUVWXYZ'SET @OKMSG = ''SET @Position = 1WHILE @Position < LEN(@MSG)
    BEGIN
    IF DATALENGTH(@OKMSG) + DATALENGTH(SUBSTRING(@MSG,@POSITION,1)) > 10  --此处应该字段长度
    BEGIN
    INSERT INTO AAA values(@OKMSG)
    SET @OKMSG = ''
    END
    ELSE
    BEGIN
    SET @OKMSG = RTRIM(@OKMSG) + SUBSTRING(@MSG,@POSITION,1)
    SET @POSITION = @POSITION + 1
    END
    IF @Position >= LEN(@MSG)
    INSERT INTO AAA values(@OKMSG)
    END
      

  5.   

    你还是可以以LEN函数来判断长度是否达到10(LEN只判断串长度,而不管字节为多少),只要把表相应的字段字符长度改为20,大不了10个字符全是汉字。但是,你的代码不用做改变。这应该可以的。试试吧。