怎样对数据库中的的一个表中的所有的列进行查询?

时间:2022-07-16 13:48:30
怎样对数据库中的的一个表中的所有的列进行查询?

我是不是选把每一个列加上全文索引,然后全文检索,再把全文索引删除.这样做是不是很麻烦.

还有一种方法就是对表中的每一列进行一次like查询,看能不能返回结果.

欢迎大家热烈讨论.

9 个解决方案

#1


不懂你的意思

#2


数据量较小,可以直接用like语句;反之,建议使用全文索引。

#3


UP TO libin_ftsafe(子陌红尘)

#4


现在有一个存在1000多个表的数据库,我不楚这个数据库的结构,我想测试这个软件是怎样建立数据库的,所有想在应用程序中输入一个记录,在整个数据库中查询到包含这个记录的数据表.

目前想建立一个临时表,访问sysobjects表,把所有的用户表都存在这个临时表中,然后一个表一个表的去查询.

以上问题用什么方法好呢,目前觉得可能用全文检索反而更慢.因为填充很慢,对数据库的每一列都进行一次查询好了.

#5


还是建议楼主多看看数据库对象名,这么多表的数据库设计者肯定不会没有规范的。
结合界面模块名等,然后缩小范围,手工查看。

#6


首先要知道数据库中的用户表名,如楼主所说可以从系统数据表中提取出来;然后在进行查询

#7


---跟踪程序的运行就可以了.


开始--程序--MS SQLSERVER
--事件探察器(SQL Profiler)
--文件
--新建--跟踪...
--设置要跟踪的服务器的信息(连接服务器)--确定
--设置跟踪的项目...
--然后数据库的调用情况就会显示出来

在跟踪项目设置中,如果不熟悉的话,一般用默认设置
筛选项目有几个可以注意一下:

1.DatabaseName 同于你要监测的数据库名(不过这个好像不起作用,我的电脑上设置无效)
2.DatabaseID   同于你要检测的数据库的dbid,可以用 select db_id(N'你要监测的库名')得到dbid
3.ObjectName   同于你要监测的对象名,例如表名,视图名等
4.ObjectID     同于你要监测的对象的id,可以用 select object_id(N'你要监测的对象名')得到id
5.Error        同于错误,如果经常出现某个编号的错误,则针对此错误号
6.Seccess      同于0,失败,1,成功,如果是排错,就过滤掉成功的处理

#8


--如果直接查询,可以参考我的这段代码:

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_search]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_search]
GO

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

--邹建 2004.10(引用请保留此信息)--*/

/*--调用示例
use pubs
exec p_search N'l'
--*/
create proc p_search
@str Nvarchar(1000) --要搜索的字符串
as
if @str is null return

declare @s Nvarchar(4000)
create table #t(表名 sysname,字段名 sysname)

declare tb cursor local for
select s='if exists(select 1 from ['+replace(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

#9


问题已解决,非常感谢诸位,特别是 zjcxc(邹建)

#1


不懂你的意思

#2


数据量较小,可以直接用like语句;反之,建议使用全文索引。

#3


UP TO libin_ftsafe(子陌红尘)

#4


现在有一个存在1000多个表的数据库,我不楚这个数据库的结构,我想测试这个软件是怎样建立数据库的,所有想在应用程序中输入一个记录,在整个数据库中查询到包含这个记录的数据表.

目前想建立一个临时表,访问sysobjects表,把所有的用户表都存在这个临时表中,然后一个表一个表的去查询.

以上问题用什么方法好呢,目前觉得可能用全文检索反而更慢.因为填充很慢,对数据库的每一列都进行一次查询好了.

#5


还是建议楼主多看看数据库对象名,这么多表的数据库设计者肯定不会没有规范的。
结合界面模块名等,然后缩小范围,手工查看。

#6


首先要知道数据库中的用户表名,如楼主所说可以从系统数据表中提取出来;然后在进行查询

#7


---跟踪程序的运行就可以了.


开始--程序--MS SQLSERVER
--事件探察器(SQL Profiler)
--文件
--新建--跟踪...
--设置要跟踪的服务器的信息(连接服务器)--确定
--设置跟踪的项目...
--然后数据库的调用情况就会显示出来

在跟踪项目设置中,如果不熟悉的话,一般用默认设置
筛选项目有几个可以注意一下:

1.DatabaseName 同于你要监测的数据库名(不过这个好像不起作用,我的电脑上设置无效)
2.DatabaseID   同于你要检测的数据库的dbid,可以用 select db_id(N'你要监测的库名')得到dbid
3.ObjectName   同于你要监测的对象名,例如表名,视图名等
4.ObjectID     同于你要监测的对象的id,可以用 select object_id(N'你要监测的对象名')得到id
5.Error        同于错误,如果经常出现某个编号的错误,则针对此错误号
6.Seccess      同于0,失败,1,成功,如果是排错,就过滤掉成功的处理

#8


--如果直接查询,可以参考我的这段代码:

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_search]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_search]
GO

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

--邹建 2004.10(引用请保留此信息)--*/

/*--调用示例
use pubs
exec p_search N'l'
--*/
create proc p_search
@str Nvarchar(1000) --要搜索的字符串
as
if @str is null return

declare @s Nvarchar(4000)
create table #t(表名 sysname,字段名 sysname)

declare tb cursor local for
select s='if exists(select 1 from ['+replace(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

#9


问题已解决,非常感谢诸位,特别是 zjcxc(邹建)