用代码实现BCP的导出功能时出现乱码
环境: 
             1.Winxp   sp2   en 
             2   .SQL   2K5   Dev   en 
 目的:使用代码实现使用BCP导出表至文本文件 
 运行情况:   导出的文本内,本来应该是中文的,现在都是乱码,但是奇怪的是,我把乱码的文本再导入到数据库里,却发现能显示正常的中文.   
 ***********************************************************************   
 我是参照邹老大的: 
 if   exists(select   1   from   sysobjects   where   name= 'File2Table '   and   objectproperty(id, 'IsProcedure ')=1) 
    drop   procedure   File2Table 
 go   
 /*--实现数据导入/导出的存储过程   
    可以实现导入/导出   整个数据库/指定表   到文本文件   
 --邹建   2003.07(引用请保留此信息)--*/   
 /*--调用示例   
    --导出指定表 
    exec   file2table   @tbname=N 'jobs,pub_info ',@filename= 'c:\[@tbname].txt '   
    --导出所有表 
    exec   file2table   @filename= 'c:\[@dbname]_[@tbname].txt '   
    --导入所有表 
    exec   file2table   @filename= 'c:\[@dbname]_[@tbname].txt ',@isout=0 
 --*/ 
 create   procedure   File2Table 
 @tbname   nvarchar(4000)= ' ',         --表名列表,如果不指定,则表示所有用户表 
 @filename   nvarchar(1000)= ' ',   --导出的文件名,如果不指定,导出到SQL   Server的默认备份目录\[@dbname]_[@tbname].txt,其中[@dbname]在处理中会替换为数据库名,[@dbname]会用表名代替 
 @isout   bit=1,                                                --1为导出(默认),0为导入 
 @username   sysname= ' ',                        --用户名,如果sql不允许使用NT验证方式登录,则必须指定 
 @password   sysname= ' ',                        --密码 
 @code   char(1)=N 'N '                                 --文件编码,可以是n,c,N,W,作用参考bcp语法(如果是数据传输需要,建议用N) 
 as 
 declare   @s   nvarchar(4000)   
 if   isnull(@code,N ' ')   not   in(N 'n ',N 'c ',N 'N ',N 'W ') 
    set   @code= 'N '   
 --备份文件名 
 if   isnull(@filename,N ' ')=N ' ' 
 begin 
    select   top   1   @filename=rtrim(reverse(filename))    
    from   master.dbo.sysfiles    
    where   name=N 'master ' 
    select   @filename=stuff(@filename,1,charindex( '\ ',@filename),N ' ') 
       ,@filename=reverse(stuff(@filename,1,charindex( '\ ',@filename),N ' ')) 
       +N '\BACKUP\ '+db_name()+N '_[@tbname].txt ' 
 end 
 else 
    set   @filename=replace(@filename,N '[@dbname] ',db_name())   
 declare   tb   cursor   local 
 for 
 select   N 'bcp    " '+db_name() 
    +N '. '+quotename(user_name(uid)) 
    +N '. '+quotename(name) 
    +N ' " ' 
    +case   when   @isout=1   then   N '   out '   else   N '   in '   end 
    +N '    " ' 
    +replace(@filename,N '[@tbname] ',name) 
    +N ' "   / '+@code 
    +case   when   isnull(@username,N ' ')=N ' '   then   N '   /T ' 
       else   N '   /U " '+@username 
 +N ' "   /P " '+isnull(@password,N ' ')+N ' " '+N '