收录日期:2019/04/24 08:28:21 时间:2016/05/29 20:47:25 标签:基础类
比如我知道一段信息“上海部门人员”,能以此找到是哪个表的哪个字段吗,请高手指导
不会,友情up
哪怕用什么免费的工具,能做到就行呀。真的没人知道怎么办吗,郁闷
贴(邹老大的):
--搜索某个字符串在那个表的那个字段中

declare @str varchar(100)
set @str='White'  --要搜索的字符串

declare @s varchar(8000)
declare tb cursor local for
select s='if exists(select 1 from ['+b.name+'] where ['+a.name+'] like ''%'+@str+'%'')
 print ''所在的表及字段: ['+b.name+'].['+a.name+']'''
from syscolumns a join sysobjects b on a.id=b.id
where b.xtype='U' and a.status>=0
 and a.xusertype in(175,239,231,167)
open tb
fetch next from tb into @s
while @@fetch_status=0
begin
 exec(@s)
 fetch next from tb into @s
end
close tb
deallocate tb

/*--测试结果

所在的表及字段: [authors].[au_lname]

--*/
豌豆:这段语句放到我要找的库运行吧?
没有显示结果呀

--小改一下就可以了
--搜索某个字符串在那个表的那个字段中
use yourdatabase  --yourdatabase填你的数据库名
go
declare @str varchar(100)
set @str='上海部门人员'  --要搜索的字符串

declare @s varchar(8000)
declare tb cursor local for
select s='if exists(select 1 from ['+b.name+'] where ['+a.name+'] like ''%'+@str+'%'')
 print ''所在的表及字段: ['+b.name+'].['+a.name+']'''
from syscolumns a join sysobjects b on a.id=b.id
where b.xtype='U' and a.status>=0
 and a.xusertype in(175,239,231,167)
open tb
fetch next from tb into @s
while @@fetch_status=0
begin
 exec(@s)
 fetch next from tb into @s
end
close tb
deallocate tb

晕倒,从软件里看是有这些信息的,但根据豌豆的语句就是找不出来
不可能呀,你把你用的语句贴出来看看
这段语句应该是错的,随便找个知道的字段信息去查,也查不出来
我建了个存储过程
CREATE PROCEDURE serchfield AS

declare  @str  varchar(100)  
set  @str='2004-3-21 10:03:57 (云河许云)'    --要搜索的字符串  
 
declare  @s  varchar(8000)  
declare  tb  cursor  local  for  
select  s='if  exists(select  1  from  ['+b.name+']  where  ['+a.name+']  like  ''%'+@str+'%'')  
 print  ''所在的表及字段:  ['+b.name+'].['+a.name+']'''  
from  syscolumns  a  join  sysobjects  b  on  a.id=b.id  
where  b.xtype='U'  and  a.status  >=0  
 and  a.xusertype  in(175,239,231,167)  
open  tb  
fetch  next  from  tb  into  @s  
while  @@fetch_status=0  
begin  
 exec(@s)  
 fetch  next  from  tb  into  @s  
end  
close  tb  
deallocate  tb
你把set  @str='2004-3-21 10:03:57 (云河许云)'    --要搜索的字符串  改成
set  @str='云河许云'    --要搜索的字符串  
看看
先不忙做成存储过程
use northwind
go
IF EXISTS (SELECT name 
   FROM   sysobjects 
   WHERE  name = N'serchfield' 
   AND    type = 'P')
    DROP PROCEDURE serchfield
GO
CREATE PROCEDURE serchfield AS

declare  @str  varchar(100)  
set  @str='Westboro'    --要搜索的字符串  
 
declare  @s  varchar(8000)  
declare  tb  cursor  local  for  
select  s='if  exists(select  1  from  ['+b.name+']  where  ['+a.name+']  like  ''%'+@str+'%'')  
 print  ''所在的表及字段:  ['+b.name+'].['+a.name+']'''  
from  syscolumns  a  join  sysobjects  b  on  a.id=b.id  
where  b.xtype='U'  and  a.status  >=0  
 and  a.xusertype  in(175,239,231,167)  
open  tb  
fetch  next  from  tb  into  @s  
while  @@fetch_status=0  
begin  
 exec(@s)  
 fetch  next  from  tb  into  @s  
end  
close  tb  
deallocate  tb
go
exec serchfield
/*
结果为:
所在的表及字段:  [Territories].[TerritoryDescription]
*/
--看看是否字段类型的问题.

--搜索某个字符串在那个表的那个字段中

declare @str Nvarchar(100)
set @str=N'云河许云'  --要搜索的字符串

declare @s Nvarchar(4000)
declare tb cursor local for
select s='if exists(select 1 from ['+b.name+'] where ['+a.name+'] like N''%'+@str+'%'')
print ''所在的表及字段: ['+b.name+'].['+a.name+']'''
from syscolumns a join sysobjects b on a.id=b.id
where b.xtype='U' and a.status>=0
and a.xusertype in(175,239,231,167)
open tb
fetch next from tb into @s
while @@fetch_status=0
begin
exec(@s)
fetch next from tb into @s
end
close tb
deallocate tb

/*--测试结果

所在的表及字段: [authors].[au_lname]

--*/
这样可以找到一部分,但有些还是找不出来
可能有些字段是ntext类型的,它可以搜出直接是“云河许云”,但'2004-3-21 10:03:57 (云河许云)'就搜不出来
豌豆:你在你本地试一下查复杂点的信息,看能不能查出来
--测试
create table tb(a ntext)
insert tb select '可能有些字段是ntext类型的,它可以搜出直接是“云河许云”,但''2004-3-21 10:03:57 (云河许云)''就搜不出来'
go

--搜索某个字符串在那个表的那个字段中

declare @str Nvarchar(100)
set @str=N'2004-3-21 10:03:57 (云河许云)'  --要搜索的字符串

declare @s Nvarchar(4000)
declare tb cursor local for
select s='if exists(select 1 from ['+b.name+'] where ['+a.name+'] like N''%'+@str+'%'')
print ''所在的表及字段: ['+b.name+'].['+a.name+']'''
from syscolumns a join sysobjects b on a.id=b.id
where b.xtype='U' and a.status>=0
and a.xtype in(175,239,99,35,231,167)

open tb
fetch next from tb into @s
while @@fetch_status=0
begin
exec(@s)
fetch next from tb into @s
end
close tb
deallocate tb
go

--删除测试
drop table tb

/*--测试结果

所在的表及字段: [tb].[a]
--*/
这个不是复杂信息的问题,是字段类型的问题

and a.xtype in(175,239,99,35,231,167)  --这里的条件限制了搜索的字段的数据类型
                                       --原来是不允许text/ntext的,加上就行了

hibernate 连接sybase库实现分页时的问题??急。。。在线等 Linux,140G的硬盘全部分到/的问题? 求助,关于获得系统信息的方法 通过web下载文件的问题? 我要showhand了,求实际工作中的经验 在ACCESS数据库中,以日期时间变量来查询!!! 请问在php5里,GET/POST过去的参数,在页面中如何拿到 要OA资料的请留下联系方式 请大侠们进来看一下,谢谢了! !!struts当中actionform能不能跳转啊!! 一些文档下载,需要强制另存的办法,谢谢 请问时间函数的用法 SQL数据库双表查询问题 C# WINFORM 下的TREEVIEW 的一个怪问题!!! 缓存出错如何解决? vb.net2005 如何实现分页打印 这是一个oracle10gas配置jsp的问题 关于SUM语句,不知错在那里。 有个全职的job在上海 怎么解决这个报错( 试图创建 System.Web.Services.Protocols.SoapHttpClientProtocol 的实例时发生异常。异常为“代理类上需要 WebServi 网络电话向导 没分了,我要找工作 网络电话向导 怎样控制显卡的输出? 网络电话向导 SQL语句的执行效率 eclipse 几个简单问题 韩国人出的题--系统安全结构的问题--请大家帮忙 如何用Indy组件访问GMAIL? VB数组问题求教,急,急,急!