======超级查询(存储过程)==================
用途:想查找sql server数据库中某个内容,但不知道在哪个表的哪个字段,数据表多,字段更多,一个表,一个字段的查那要
查到什么时候?改过别人写的程序的人一定有过经历,例如说我,经常改动网论坛,看的都晕,好多都放到数据库里,我又不知
道是在哪个表哪个字段,改起来真NND累,所以小弟写了这个小存储过程忘大家批评指教。
使用方法:
***新建存储过程,先拷贝代码,粘贴,在查询分析器中运行***
使用方法:
find "表名","要查找的内容"
例1:
find "用户名","笨蛋" /*结果返回表名、字段、记录数、命令(可以运行)*/
例二:
find "*","笨蛋"
----sql server 2000测试通过----------
CREATE PROCEDURE find
@table varchar(50),
@findstr varchar(500)
AS
declare @fields varchar(2000)/*字段列表*/
declare @qswz int /*字段起始位置,即第一个字段*/
declare @zzwz int /*终止位置*/
declare @hs int /*返回行数*/
declare @field varchar(200)/*查询字段*/
declare @return varchar(8000) /*返回*/
set @fields=''
if(@table='*')
begin
create table #ls1([table] varchar(100),sqlcmd varchar(300))/*表名,字段,影响行数,查询命令*/
select @fields=@fields+','+[name] from sysobjects where xtype='U' and name<>'dtproperties'
set @fields=right(@fields,len(@fields)-1)
set @fields=@fields+','
set @qswz=0
set @zzwz=0
set @zzwz=charindex(',',@fields)
while (@zzwz>0)
begin
set @field=substring(@fields,@qswz,@zzwz-@qswz)
insert into #ls1([table],sqlcmd) values(@field,'find '''+@field+''','''+@findstr+'''')
set @qswz=@zzwz+1
set @zzwz=charindex(',',@fields,@qswz)
end
select * from #ls1
declare yb cursor for select [table] from #ls1
open yb
fetch next from yb into @field
while (@@fetch_status=0)
begin
print 'find '''+@field+''','''+@findstr+''''
print 'go'
fetch next from yb into @field
end
close yb
deallocate yb
drop table #ls1
end
else
begin
select @fields=@fields+','+[name] from syscolumns where id=object_id(@table) and (xtype=175 or xtype=62
or xtype=239 or xtype=99 or xtype=56 or xtype=231 or xtype=35 or xtype=167) order by colid
set @fields=right(@fields,len(@fields)-1)
set @fields=@fields+','
set @qswz=0
set @zzwz=0
set @zzwz=charindex(',',@fields)
create table #ls([table] varchar(100),field varchar(100),hs int,sqlcmd varchar(300))/*表名,字段,影响行数,
查询命令*/
while (@zzwz>0)
begin
set @field=substring(@fields,@qswz,@zzwz-@qswz)
set @hs=0
exec('declare yb cursor for select count(*) from '+@table+' where '+@field+' like
''%'+@findstr+'%''')
open yb
fetch next from yb into @hs
close yb
deallocate yb
if (@hs>0)
begin
declare @ls varchar(8000)
set @ls='declare @test varchar(8000);select @test=convert(varchar(8000),'+@field+') from
'+@table+' where '+@field+' like ''%'+@findstr+'%'';print @test;select '''+@table+''' as [table],'+@field+',*
from '+@table+' where '+@field+' like ''%'+@findstr+'%'''
insert into #ls([table],field,hs,sqlcmd) values(@table,@field,@hs,@ls)
end
set @qswz=@zzwz+1
set @zzwz=charindex(',',@fields,@qswz)
end
declare @ls_count int
select @ls_count=count(*) from #ls
if(@ls_count>0)
select * from #ls
drop table #ls
end
GO
问题点数:1、回复次数:11Top
1 楼chinaandys(降龙十八炒&&蛋炒饭)回复于 2005-01-18 15:08:48 得分 1
upTop
2 楼pyz8000(黑洞)回复于 2005-01-18 15:46:46 得分 0
ding a ding a ding a ding
我个人觉得不错呀,怎么没人光顾啊Top
3 楼passionke(每一步都改变未来,却只能有一种结局!)回复于 2005-01-18 15:50:07 得分 0
没感觉多实用哦Top
4 楼happyflystone(无枪的狙击手)回复于 2005-01-18 15:54:49 得分 0
upTop
5 楼hglhyy(為人民币服务!)回复于 2005-01-18 16:47:01 得分 0
你是要查那个表中有什么字段,或是查数据库中有什么表是吗?
检查一个表是否存在:
if not exists(select * from sysobjects where name='abcd')
create table abcd (
aaa char(11) not null,
bbb char(10)
);
检查一个表中某个自段是否存在:
if not exists(select b.*,a.* from sysobjects a,syscolumns b where a.name='aaa' and a.id=b.id and b.name='bbb')
alter table aaa add bbb char(2);
检查一条记录是否存在:
if not exists(select * from table_list where tbname='bbb')
insert into table_list (tbname,chnname,tbtype) values ('tblist','DEMO表','系统表');Top
6 楼mrpanweizhao(水禾田)回复于 2005-01-18 16:57:03 得分 0
upTop
7 楼pyz8000(黑洞)回复于 2005-01-18 17:16:32 得分 0
这个程序是:
当sql server的一个数据库中有很多个表,比如50个,这个表又不是你自己设计的,
这时,你想查找一个内容,比如‘企业代码’之类的,
请问大家是怎么查找的???????
我的查找方法是用上面的存储过程:
find 表名,'企业代码'
大家是怎么查找呢?是用企业管理器一个一看还是用查询下面这种语句:select * from 表名 where field1 like '%企业代码%' or field2 like '%企业代码%' or ...fieldN like '%企业代码%'
我只要用 find 表名,'企业代码' 便可以了。
而且 表名可以用*代替,大家可以试试^_^Top
8 楼aliren(阿里人)回复于 2005-01-18 17:29:47 得分 0
怎么用都不知道。。。。。。我建了存储过程,然后执行
find 表名,'jimmy' or
find '表名','jimmy' or
find "表名","jimmy" 都如下错误
服务器: 消息 536,级别 16,状态 1,过程 find,行 50
向 substring 函数传递了无效的 length 参数。
服务器: 消息 156,级别 15,状态 1,行 1
在关键字 'like' 附近有语法错误。
服务器: 消息 16916,级别 16,状态 1,过程 find,行 67
名为 'yb' 的游标不存在。
服务器: 消息 16916,级别 16,状态 1,过程 find,行 68
名为 'yb' 的游标不存在。
服务器: 消息 16916,级别 16,状态 1,过程 find,行 69
名为 'yb' 的游标不存在。
服务器: 消息 16916,级别 16,状态 1,过程 find,行 70
名为 'yb' 的游标不存在。Top
9 楼aliren(阿里人)回复于 2005-01-18 17:32:49 得分 0
垃圾东西。。Top
10 楼pyz8000(黑洞)回复于 2005-01-19 11:04:42 得分 0
晕Top
11 楼zlp321002(Life Is Good,Let's Shine)回复于 2005-01-19 11:11:23 得分 0
--大家不要否认楼主的劳动成果好不好?
--楼主也是用心良苦
我来学习~Top




