1.所有的表中:pe_usename是主键,有索引吗? 没有的话就建上
2.如果 pe_usename 在某个表中重复,就会产生记录不一致的情况

解决方案 »

  1.   

    回:
    1.所有表中,PE_USENAME是主键,也有索引。
    2.那我应该怎么做?
      

  2.   

    是主键怎么可能产生重复?你将上述语句复制到查询分析器中,按ctrl+L,看看是否确实利用上了索引?
      

  3.   

    数据好大,我怎么给你啊????我刚才将PE_BASE的重复记录删除了,也检查主键了,没问题可是奇怪PE_LOG里居然有两个重复的记录,我想问题就出在这。
    PE_LOG里的也是有主键的呀。
      

  4.   

    PE_BASE里你用什么做主键? 
    如果是PE_USENAME的话,出现上述情况,表明你的索引坏了.
    删除重新做
      

  5.   

    --试试用下面的语句,检查/修复数据库/并整理索引碎片(需要比较长的时间,请在系统空闲时进行此工作)USE MASTER
    GOsp_dboption '你的数据库名', 'single user', 'true'
    GoDBCC CHECKDB('你的数据库名', REPAIR_REBUILD) 
    GoUSE 你的数据库名
    goexec sp_msforeachtable 'DBCC CHECKTABLE(''?'',REPAIR_REBUILD)'
    exec sp_msforeachtable 'DBCC DBREINDEX(''?'')'
    gosp_dboption '你的数据库名', 'single user', 'false'
    Go
      

  6.   

    邹键:好,我中午的时候做。谢谢:)
    jiangchuandong(奋斗成男人) 用中间表又是怎么写?教教我。
      

  7.   

    邹键:有个存储过程的问题问你~~
    CREATE    PROCEDURE [SrcSearchAsName](@username varchar(30))
    AS
    SELECT 
    a.pe_usename,a.username,a.sex,a.sc_id,a.enroll_time,a.specialty1 as specialtyID,
      a.edc_Level,a.last_update,
     case 
        when a.birth is null or ltrim(rtrim(a.birth))='' then ''
        else
          datediff(yy,a.birth,getdate()) 
        end
      as Age,
    --我在这想这找出B表的SCHOOLNAME.  
    --通过A.SC_ID和B.SC_ID相关联。
    --最近得出的结果 AS UNIVERSITY
     
    FROM 
    PE_ZONG A,SC_BASE B
    WHERE 
    A.username like '%'+@username+'%'
    order by a.username
      

  8.   

    CREATE    PROCEDURE [SrcSearchAsName](@username varchar(30))
    AS
    SELECT 
    a.pe_usename,a.username,a.sex,a.sc_id,a.enroll_time,a.specialty1 as specialtyID,
      a.edc_Level,a.last_update,
     case 
        when a.birth is null or ltrim(rtrim(a.birth))='' then ''
        else
          datediff(yy,a.birth,getdate()) 
        end
      as Age,
    --我在这想这找出B表的SCHOOLNAME.  
    --通过A.SC_ID和B.SC_ID相关联。
    --最近得出的结果 AS UNIVERSITY
    (
    select top 1 SCHOOLNAME from B表 --表名叫B表
    where SC_ID=A.SC_ID 
    order by 日期  desc --最近是怎么算? 有个日期字段?
    ) as UNIVERSITY
    -------------------------------------------------------------
    FROM 
    PE_ZONG A,SC_BASE B
    WHERE 
    A.username like '%'+@username+'%'
    order by a.username
      

  9.   

    order by 日期  desc --最近是怎么算? 有个日期字段?
    这个用不着啊,只要找出他对应的学校名称就可以了:)---------------------------
    ………………
    -- AND(
    -- @key='' OR
    -- A.USERNAME LIKE '%'+@key+'%'
    -- OR (A.SC_ID=B.SC_ID AND B.SCHOOL LIKE '%'+@key+'%')
    -- OR A.TEL1 LIKE '%'+@key+'%'
    -- OR A.TEL2 LIKE '%'+@key+'%'
    -- OR A.EMAIL LIKE '%'+@key+'%')
    …………这一段放在存储过程中执行起来很慢哦,因为是LIKE,又OR,还有什么办法吗?