根据字段内容查找表名

来源:互联网 发布:软件项目验收管理制度 编辑:程序博客网 时间:2024/06/13 07:13

--存储指定数据库中的表名
CREATE TABLE T(ID INT IDENTITY(1,1),T_NAME VARCHAR(100) NULL,rc int null)
--存储指定表的所有列名
CREATE TABLE T_c(ID INT IDENTITY(1,1),T_c VARCHAR(100) NULL,t_t varchar(20) null)
declare @t varchar(300) --表名
declare @t_c varchar(20)--栏位名称
declare @t_T varchar(20)--栏位所属表名
declare @sql varchar(8000)
/*******************************
处理思路:取出数据库中所用的表,外循环每个表
取表的所用列,内循环每个列是否有合符条件的数据,
有则保存该表名
*******************************/
--具体的实现细节如下:
declare cur_test cursor FOR select NAME from sysobjects where type='u'
open cur_test
fetch cur_test into @t
while @@fetch_status=0
 BEGIN
  insert into t_c(t_c,t_t) select name,@T  from syscolumns where id=object_id(@t)
  declare cur_c cursor for select t_c,t_t from t_c
  open cur_c
  fetch cur_c into @t_c,@t_t
  while @@fetch_status=0
   begin
    
    set @sql=isnull(@sql,'')+'insert into t(t_name )select  '''+@t_t+''' from '+ @t_t+' as a  where  exists(select * from '+@t_t+' where  a.ID ='+@t_t+'.ID AND '+ @t_c+' like ''%贵在坚持%'')'
print   @sql  
exec(@sql)
    set @sql=''
    fetch cur_c into @t_c,@t_t
   end
  close cur_c
  deallocate cur_c
  truncate table t_c

  fetch cur_test into @t
 end

 

CLOSE cur_test
DEALLOCATE cur_test