免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2693 | 回复: 6
打印 上一主题 下一主题

数据库查询方面的疑惑 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-07-02 04:36 |只看该作者 |倒序浏览
环境:
windows2003
SqlServer2005
数据库:30个库
表和字段数不清

想查询一个用户的数据,想查询的用户叫 “小王”,而我不知道这个 “小王” 在哪个库里面的哪个表的字段里。
只知道这个小王在这个数据库服务器上的某一个库德某一个表的某一个字段中。

1.请问我有什么办法能找到这个“小王”的具体哪个表的位置呢?

2.请问如果我要是知道 这个“小王”在 username 这个字段,我该怎么找到他的库和标段?

3.请问如果我现在知道了这个“小王”在哪个库,并且知道了字段名字为 username,我该怎么找到这个表?

谢谢../ 现在我不知道这个小王在哪个库的哪个表里。

论坛徽章:
33
ChinaUnix元老
日期:2018-07-04 15:10:362015年亚洲杯之阿联酋
日期:2015-02-06 17:15:532015亚冠之武里南联
日期:2015-06-06 15:40:252015亚冠之北京国安
日期:2015-06-17 15:42:412022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:322015亚冠之阿尔纳斯尔
日期:2015-09-20 09:42:1215-16赛季CBA联赛之北京
日期:2016-01-15 10:03:5915-16赛季CBA联赛之青岛
日期:2016-04-26 16:44:4915-16赛季CBA联赛之广夏
日期:2018-07-04 15:33:21C
日期:2016-10-25 16:12:142017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之同曦
日期:2017-02-22 22:41:10
2 [报告]
发表于 2010-07-02 08:52 |只看该作者
貌似试题?

论坛徽章:
6
水瓶座
日期:2014-06-04 03:34:37水瓶座
日期:2014-06-17 13:20:31数据库技术版块每日发帖之星
日期:2016-07-09 06:20:00数据库技术版块每日发帖之星
日期:2016-07-17 06:20:00数据库技术版块每日发帖之星
日期:2016-08-01 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
3 [报告]
发表于 2010-07-02 10:40 |只看该作者
回复 1# bincker


    这个题目是有难度。 嘴上说很简单, 但是真正实现起来, 得有点功夫。

论坛徽章:
0
4 [报告]
发表于 2010-07-05 13:47 |只看该作者
1、a、可以导出所有的表的数据,然后用windows工具搜索文件中含有“小王”的文件,再进行匹配
     b  使用数据库全文搜索引擎,不过得做这个服务
2、在每个库都去搜索库的syscolumns表中存有相关字段名,可以通过select object_name(id) from syscolumns where name='USERNAME'
3、在该库的syscolumns表中存有相关字段名,可以通过select object_name(id) from syscolumns where name='USERNAME'

论坛徽章:
6
水瓶座
日期:2014-06-04 03:34:37水瓶座
日期:2014-06-17 13:20:31数据库技术版块每日发帖之星
日期:2016-07-09 06:20:00数据库技术版块每日发帖之星
日期:2016-07-17 06:20:00数据库技术版块每日发帖之星
日期:2016-08-01 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
5 [报告]
发表于 2010-07-05 14:34 |只看该作者
实际上,重点中就在于如何在所有的数据中查找指定的字符。

1、a、可以导出所有的表的数据,然后用windows工具搜索文件中含有“小王”的文件,再进行匹配
     b  使用数据库全文搜索引擎,不过得做这个服务


这种方法有点太麻烦了吧。

可以考虑用sql语句来实现。

select o.name,c.name from sysobjects o,syscolumns c ,systypes t
where o.id = c.id and c.usertype = t.usertype and t.name in ('所有的能存储字符串的类型')

动态拼接sql语句:
@execsql = "select count(*) as num from " + @table_name + " where " + @column_name + " like '%小王%' "
execute(@sql)  判断传回的变量中num是否大于0,即可判断相应表的相应字段是否包含小王俩字。

移动游标,继续判断其它的字段。。。。。



以上为一个数据库,再接着判断其它的数据库。

论坛徽章:
6
水瓶座
日期:2014-06-04 03:34:37水瓶座
日期:2014-06-17 13:20:31数据库技术版块每日发帖之星
日期:2016-07-09 06:20:00数据库技术版块每日发帖之星
日期:2016-07-17 06:20:00数据库技术版块每日发帖之星
日期:2016-08-01 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
6 [报告]
发表于 2010-07-06 14:31 |只看该作者
declare @str varchar(100)
set @str='a'  --要搜索的字符串

declare @s varchar(8000)
declare tb cursor local for
    select '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
-- 2 结合上面 从所有库中搜索

if object_id('up_ValueSearch')is not null drop proc up_ValueSearch
go
create proc up_ValueSearch @db varchar(200),@str varchar(100)
as
begin
declare @s varchar(8000)
declare tb cursor local for
    select 'if exists(select 1 from ['+b.name+'] where ['+a.name+'] like ''%'+@str+'%'')
        print '' ['+@db+']..['+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
end
go
-- 调用示例
sp_msforeachdb 'up_ValueSearch ?,''aa'''

还有其他的方法,请参考:http://blog.csdn.net/xys_777/archive/2010/07/02/5708217.aspx

论坛徽章:
7
数据库技术版块每日发帖之星
日期:2015-08-09 06:20:00数据库技术版块每日发帖之星
日期:2015-11-03 06:20:00数据库技术版块每日发帖之星
日期:2016-02-20 06:20:00数据库技术版块每日发帖之星
日期:2016-07-13 06:20:00数据库技术版块每日发帖之星
日期:2016-07-31 06:20:00数据库技术版块每日发帖之星
日期:2016-08-01 06:20:00数据库技术版块每日发帖之星
日期:2016-08-18 06:20:00
7 [报告]
发表于 2010-07-07 10:16 |只看该作者
declare @str varchar(100)
set @str='a'  --要搜索的字符串

declare @s varchar(8000)
declare tb cu ...
andkylee 发表于 2010-07-06 14:31



    写得真不错——不过 用cursor执行效率会很低,建议改用临时表存放执行语句。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP