收录日期:2019/02/17 00:03:46 时间: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的,加上就行了

linux上开发sip协议前景怎么样? Flexigrid无法显示数据,求大神围观 DirectDrawSurface7在win7 64位与win8上的问题 刚学Linux,选择那个方向比要好? 转android去了 动态生成的PictureBox如何解决当前索引? 求大儒赐名。。。 批量更新某一字段 android中appwidget重新加载出问题。怎么解决啊 c输出问题怎么让输入和输出在同一行 求指教关于如何查询javabean问题 如何获得进程管理器进程的内存占用率以及进程描述 在MS-DOS命令行下怎么实现log文件的删除操作????? android应用移植到Z10后返回键不显示 没运行前窗体固定是怎么做到的. python如何将(u\'\\xb3\\xc2\\xbd\\xa8\\xc3\\xf4\',) 转为字符串。 AARON7744, 节日快乐 jquery用母版,验证不了 请教VB.NET WinForm如何获取当前域用户名? 哎,小手游项目终于上线了。 rtsp协议,vs08上使用要装什么东西???? 监听蓝牙耳机的音量控制键事件 delphi7 安装 EmbeddedWB_D2005出错 【淼淼】放假通知 怎么给一个网页的图片加一个超链接 犇犇熊, 节日快乐 如何取消ASPX页面上的默认按钮? 屌丝程序员求婚记 前景考虑 一道简单的java题