SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GOALTER  PROCEDURE dh_GetQueryResult (@TableName varchar(100),@QueryString varchar(100),@StrCondition varchar(100)) AS declare @Ssql varchar(8000) DECLARE Query_cursor CURSOR FOR Select S.Name from SysColumns S inner join SysObjects O on S.ID=O.ID Where O.Name=@TableName declare @FName varchar(100) open Query_cursor fetch Query_cursor into @FName Set @Ssql='(Select * from '+@TableName +' Where Cast ('+@FName +' as varchar) like ''%' +@QueryString +'%'''+@Strcondition+')' fetch next from Query_cursor into @FName while @@fetch_status=0 begin  set @Ssql=@Ssql+( ' union all (Select * from '+@TableName +' Where Cast ('+@FName +' as varchar) like ''%' +@QueryString+'%'''+@Strcondition+')') fetch next from Query_cursor into @FName end  close Query_cursor deallocate Query_cursor Exec(@Ssql) return
GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

解决方案 »

  1.   

    因为union会去掉重复记录(相当于distinct),而text字段是不支持的,所以你改用:
    union all 就行了.
      

  2.   

    union all 会所有的记录都重复显示出来的,
      

  3.   


    CREATE         PROCEDURE dh_GetQueryResult (@TableName varchar(100),@QueryString varchar(100),@StrCondition varchar(100)) AS declare @Ssql varchar(8000) DECLARE Query_cursor CURSOR FOR Select S.Name from SysColumns S inner join SysObjects O on S.ID=O.ID Where O.Name=@TableName declare @FName varchar(100) open Query_cursor fetch Query_cursor into @FName Set @Ssql='Select * from '+@TableName +' Where (Cast ('+@FName +' as varchar) like ''%' +@QueryString +'%''' fetch next from Query_cursor into @FName while @@fetch_status=0 begin  set @Ssql=@Ssql+ ' or Cast ('+@FName +' as varchar) like ''%' +@QueryString +'%''' fetch next from Query_cursor into @FName end 
    set @Ssql=@Ssql+')'+@Strcondition close Query_cursor deallocate Query_cursor Exec(@Ssql) return