关于sqlserver字段中文+英文的问题
如果一个字段是varchar(50)   
 现有一堆不规整数据想转入,只取   left(str,50) 
 然后发现如果含有中文left取到的是50个中文字,那么存进去要100字节,就转不进去 
 如果只取left(str,25)那么对于英文数据来讲,就少了一半 
 我发现用ascii(str)> 128判断,只能判断第一个字符是不是英文如果是 'aA '这样的数据就没办法了   
 对于这个,我应该怎么做好呢?
------解决方案--------------------你就定義最大的 varcahr(100)
------解决方案--------------------楼主看一下这两个的用法,应该对你有帮助 
 select len( 'aA ') 
 select length( 'aA ')
------解决方案--------------------其实你也不用,直接如果是varchar(50),直接插入的话就会拿右边50位的了 
 如: 
 declare @a varchar(10) 
 set @a= '本世32dg地f ' 
 select @a 
 结果就是              
 ----------  
 本世32dg地   
 (所影响的行数为 1 行) 
------解决方案--------------------用 nvarchar(50) 就可以了
------解决方案--------------------方法一(简单):将字段数据类型改为nvarchar   
 方法二(麻烦):通过一个自定义函数截断字符串 
 create function f_str(@stri varchar(20)) 
 returns varchar(10) 
 as 
 begin 
  declare @i int, 
 	 @l int, 
 	 @stro varchar(10)   
  set @i = 1 
  set @l = 0   
  while @l  <= 8 
  begin 
   set @l = @l + case when ascii(substring(@stri, @i, 1))  <= 128 then 1 else 2 end 
   set @stro = isnull(@stro,  ' ') + substring(@stri, @i, 1) 
   set @i = @i + 1 
  end   
  if(@l = 9 and ascii(substring(@stri, @i, 1))  <= 128) 
   select @stro = @stro + substring(@stri, @i, 1)   
  return @stro 
 end   
 /*测试:   
 select dbo.f_str( 'sa模压地1中 '), dbo.f_str( 'sa模压地14 ') 
 ---------- ----------  
 sa模压地1     sa模压地14   
 (所影响的行数为 1 行) 
 */