none
根据条件查询整个表中的数据是否有相同!!! RRS feed

  • 问题

  • 如标题!比如我有个A表,表中有多个字段。除了id为int,其他字段类型都为varchar。怎么查询表中的数据是否与条件相同。可以实现这个SQL语句吗,  可以,请问要怎么实现?求解!

    我写了一个select count(*) from A where 列名1=条件 or 列名2=条件 or 列名3=条件 or……………………。

    select count(*) from A where 条件 in (列名1,列名2…………)

    请问有没有更好一点的。  我这个SQL语句。如果列名多的话,那不写晕去。

    2010年10月23日 2:55

答案

  • 没有这个功能.

    只能自己写或者如下语句:

    declare @tablename nvarchar(100)
    set @tablename='tablename'
    declare @value nvarchar(100)
    set @value='yourvalue'
    
    
    
    declare @sql nvarchar(4000)
    set @sql='select *from '+@tablename +' where '
    declare @SqlStatement_Permission_object varchar(1000)
    DECLARE proc_cur CURSOR FOR  
    
    select name From sys.columns
    where object_id=object_id(@tablename) and system_type_id<>56
    
    OPEN proc_cur;  
    FETCH NEXT FROM proc_cur  
    into @SqlStatement_Permission_object
     
    
    WHILE @@FETCH_STATUS = 0  
    BEGIN  
     set @sql=@sql+  @SqlStatement_Permission_object+'='''+@value+''' or '
    FETCH NEXT FROM proc_cur into @SqlStatement_Permission_object
    END;  
    CLOSE proc_cur;  
    DEALLOCATE proc_cur; 
    print char(10)+char(10)
    
    set @sql=LEFT(@sql,LEN(@sql)-2)
    print @sql
      
    
    
    

    有dba的职位吗(北京的),请联系我 stswordman#hotmail.com
    • 已标记为答案 张凯 2010年10月23日 8:15
    2010年10月23日 7:20
    版主

全部回复

  • 没有这个功能.

    只能自己写或者如下语句:

    declare @tablename nvarchar(100)
    set @tablename='tablename'
    declare @value nvarchar(100)
    set @value='yourvalue'
    
    
    
    declare @sql nvarchar(4000)
    set @sql='select *from '+@tablename +' where '
    declare @SqlStatement_Permission_object varchar(1000)
    DECLARE proc_cur CURSOR FOR  
    
    select name From sys.columns
    where object_id=object_id(@tablename) and system_type_id<>56
    
    OPEN proc_cur;  
    FETCH NEXT FROM proc_cur  
    into @SqlStatement_Permission_object
     
    
    WHILE @@FETCH_STATUS = 0  
    BEGIN  
     set @sql=@sql+  @SqlStatement_Permission_object+'='''+@value+''' or '
    FETCH NEXT FROM proc_cur into @SqlStatement_Permission_object
    END;  
    CLOSE proc_cur;  
    DEALLOCATE proc_cur; 
    print char(10)+char(10)
    
    set @sql=LEFT(@sql,LEN(@sql)-2)
    print @sql
      
    
    
    

    有dba的职位吗(北京的),请联系我 stswordman#hotmail.com
    • 已标记为答案 张凯 2010年10月23日 8:15
    2010年10月23日 7:20
    版主
  • 嗯。   谢谢。
    2010年10月23日 8:13
  • 如果你的表是有主键(或唯一约束)的, 则你可以考虑使用 tablediff 这个工具, 根据条件创建两个 view, 将 view 做为 tablediff 的比较对象就可以了.

    tablediff 在 >=sql 2005 的版本中提供.

    2010年10月25日 4:25