收录日期:2019/08/19 20:42:54 时间: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的,加上就行了

如何做销售(一) 如何用VB制作一个能在Office里插入对象中使用的OLE? 求教:如何在TC中显示字符串中的双引号? 查詢語句為什麼沒有查到東西呢? 如何动态向报表里填加一副图片 能否在select 中加入一個統計row的信息呢? 在asp.net中怎样使用Timer来计算此次任务用了多少时间? 问题 如何用VB制作一个能在Office里插入对象中使用的OLE? 一个网页连接问题 datagrid的ItemDataBound绑定标志字段显示的问题? Tornado环境arm cs4510b板上的设计 JAVA认证大总结 + 它们有价值吗(之二)? Microsoft .NET Framework SDK(或 Visual Studio .NET)的一份有效许可 在用C语言编写数据结构程序时,如何把类C算法改写为C程序,应该注意什么东西 女朋友长的丑,带出去有压力 请教一个sql怎么写 请教一个sql怎么写.................................... 编译通过,链接时出错.error LNK2001: unresolved external symbol \"public: jsp 问题? 怎样取得 Combo变量的值?在线等…. 如何做销售(一) 如何通过SQL的insert语句项数据表中添加中文记录 hibernate查询字段为null记录的问题,急 !!!! eclipes里面运行程序停不下来,帮帮我 SQL语句的写法,大家来看看吧~~~ 如何做销售(一) Tornado环境arm cs4510b板上的设计 想用c语言来写个像qq这样的通讯工具,请问编译c的工具选什么好 如何做销售(一)