某数据库有1000个表,我不知道数据存哪个表我想select * from 表 where xxx=bbb这里的表是这个数据库里的所有的表(以查到这个bbb到底在哪个表里)有这样的一次性语句吗

解决方案 »

  1.   

    忘记说了,不知道字段名:xxx是什么 。但知道bbb的数值
      

  2.   

    写了个需要传入表名,和字符来找出相应字段的存储过程试验用表:
    create table temp
    (A varchar(50),
    B varchar(50),
    C varchar(50),
    D varchar(50),
    E varchar(50),
    F varchar(50),
    G varchar(50)
    )
    insert into temp
    select 'ab','abc','abc','abcd','1abcb','ls','dh'
    select * from temp
    存储过程:
    create procedure pro_col (@tbl_name varchar(30),@str varchar(10))as
    declare @cur_col varchar(30)declare @sql varchar(1000)
    set @sql=''
    declare cur_col cursor forselect t2.name from sysobjects t1,syscolumns t2 where t1.id=t2.id and t1.xtype='u' and t1.name=''+@tbl_name+'' order by t2.nameopen cur_colfetch next from cur_col into @cur_col
    while @@fetch_status = 0 begindeclare @flag varchar(50)
    select @flag=''+@cur_col+''
    --set @sql=@sql+' select '''+@flag+''' 列,'+@flag+' 值 from '+@tbl_name+' where '+@flag+' like ''%'+''+@str+''+'%'''+' union all '--模糊匹配
    set @sql=@sql+' select '''+@flag+''' 列,'+@flag+' 值 from '+@tbl_name+' where '+@flag+' = '''+@str+''''+' union all '--精确匹配fetch next from cur_col into @cur_colend
    set @sql=substring(@sql,1,len(@sql)-10)
    print @sql
    exec (@sql)close cur_col
    deallocate cur_colgo
    调用:exec pro_col temp,abc--表名,字符
    结果:
    -----
    列       值
    B  abc
    C  abc
      

  3.   

    通过以下语句拼出所有表的相关执行语句select 'exec pro_col '+name+',abc' from sysobjects where xtype ='U'然后一并贴进查询分析器执行(确实有点麻烦)
      

  4.   

    用sysojbects找到表用syscolumns找列名(或用col_name)
    用游标换表,用or连接条件,用用事务停止继续查找,
    用exec改动态 用count判断是否找到
      

  5.   

    SQLSERVER能否看到某表的最后修改日期?