我在调用存储过程遇到了一个奇怪的问题:
CREATE PROCEDURE zs_Sch 
         @corp varchar(20)
AS
......--------------
调用时:
  ProcedureName:='proc_test1';
  Parameters.ParamByName('@Fint').value:='abc';
  ExecProc;
  
以上运行没有问题,可是当 Parameters.ParamByName('@Fint').value:='我们';如果是一个汉字时出错;
...odbc sql server]string data, truncation...信息提示请问高手们遇到过这个问题没有,请问如何解决?

解决方案 »

  1.   

    再写明确点Parameters.ParamByName('@Fint').value:='abc';当赋值为字母时执行正确
    Parameters.ParamByName('@Fint').value:='我们';当赋值汉字时出错;
    错误提示:...odbc sql server]string data, truncation...
      

  2.   

    Parameters.ParamByName('@Fint').DataType := ftWideString;
      

  3.   

    CREATE PROCEDURE zs_Sch 
             @corp nvarchar(20)
    AS
    将参数类型设置为可变长的Unicode的型,你设置为varchar,这样不支持Unicode
      

  4.   

    CREATE PROCEDURE zs_Sch 
             @corp nvarchar(20)
    AS
      

  5.   

    为什么你创建的存储过程和调用的存储过程不一样
    但按照你所描述的错误信息,应该是你定义的参数@Fint数据宽度小于4个字符,
    因为'abc'只有三个字符,但是'我们',因为是中文字符,而每个中文字符占用二个字节空间,固而会出现...odbc sql server]string data, truncation...信息提示
    将@Fint的数据宽度加大即可
      

  6.   

    使用unicode类型,参数是什么都无所谓了
      

  7.   

    将参数改为varchar(n) n>5 即可
    不用什么unicode
      

  8.   

    注明参数类型:如
    Parameters.ParamByName('@Fint').DataType := ftWideString;