只有一个主键,是varchar格式,第一行是112233,第二行是112233 (后面多个空格),插入失败,说是主键重复
怎么设置才能允许这样的“重复”?
坐等,立即结贴。

解决方案 »

  1.   

    sql server2000 提示重复,sybase12不提示重复,我要重sybase导数据至sqlserver2000,前提是不能改结构和数据。
      

  2.   

    char 型估计不行,这样的话还会自动补空格
      

  3.   

    drop table tt
    create table tt
    (
    zhujian varchar(200) primary key
    )
     
    insert into tt values ('123')
    insert into tt values (' 123')
    insert into tt values ('  123'+'$$')
    insert into tt values ('  123 '+'$$')
    insert into tt values ('  123  '+'$$')
    select * from tt
      

  4.   

    update tt
    set zhujian =REPLACE(zhujian,'$$','')
    select * from tt
    最后再跟新回去
      

  5.   

    你想象力很丰富,但是不行,我刚试过了,虽然我明知不管insert还是update,都是不允许这样重复的。但是看到你的想象力,我还是再试了一次
      

  6.   

    没有用的,比较时尾随空格全被忽略declare @1 varchar(10), @2 varchar(10)
    set @1 = '123'
    set @2 = '123       'if @1 = @2 print '='
    else print '<>'
    另想办法,char(9)制表符代替空格就可以区分开来了。
      

  7.   

    程序是别人的,我动不了,我只是做一个数据备份至sqlserver的软件,要求当然是和原来的结构一致、数据不做修改最好了。
      

  8.   

    你是说录入数据不代码去除前后空格,再加上Sybase认为后面多个空格就不算重复,这样一个场景极不合理?还是我希望SqlServer也像Sybase一样区分空格,这个场景不合理?
      

  9.   

    针对的是设计,不管是sybase也好,SQL Server也好,应该禁止头尾带空格的字符串做为主键,估且不说不同系统环境不能直接兼容问题,就是肉眼看去读数据也是不易读取的。当然,希望SqlServer也像Sybase一样区分空格,这个需求我认为合理。
      

  10.   

    很难,在SQL中,varchar类型其实是变形。比如varchar(50),它是说最大50字符,还有一个意思它是50个字符。当我输入111222333时,感觉它就是这个111222333,如果我们在加上3个空格,感觉应该是11122233+3空格。但是2个实际是一样的。为什么?因为在SQL数据库中是这样的。定了50.实际就是50个字符。输入111222333后,不足50字符。系统就自动把后面的补位,用空格补足50.也就一样了。和char的原理一样的。只是可能在内存中存储部一样吧(我猜的).但是在具体处理时就自动忽略了空格。我平时写程序时。遇到这个东西。string  str1=“jinyuttt”,和数据库读出的字符串string  str2=数据库读出的jinyuttt不相等。必须调用去空格函数处理str2才相等。
      

  11.   

    我认为varchar 忽略空格正是SQL server 的优点
      

  12.   

    主键是否重复取决于字段的排序规则
    varchar本身就是忽略空格的,用其它排序规则可能也没用,建议用其它方法区分
      

  13.   

    SQL SERVER 的VARCHAR(N) 和NVARCHAR(N),VCHAR(N) 和NCHAR(N)的存储区别建议楼主翻翻书,这是基础知识,用不着来问。
      

  14.   

    建该字段里面的内容都加一个结束符。比如:个人设定$结束
    123$
    123 $是不一样的
    这里的$也可以是换行符
    制表符 CHAR(9) 
    换行符 CHAR(10) 
    回车 CHAR(13) 
      

  15.   

    #18楼,你的看法不对,Varchar(50)可以存后续空格,能检测出来,可以存与主键一致性判断是两码事
    #22楼,可以存与主键一致性判断是两码事,看清楚题目再来。#21楼,我觉得你说的跟排序规则有关应该是对的,我正在从这方面思考。
      

  16.   

    我将主键的排序规则改了一下,但是仅仅能改进大小写、全角半角区分的情况,例如原先
    aa 和 AA 被认为是主键重复,排序规则上勾选区分大小写后,aa 和 AA 被认为是不重复。
    但是末尾空格的区分,没找到地方