万分火急!重谢!
编写一个存储过程
对某个库中的a表中的某几列进行检索,条件1:是a表中的一个时间列取一个时间段(例如:2005-01-01<时间列<2005-05-01),条件2:是a表中的一个字符串列等于某个字符串(例如:字符串列=‘发动机’)
另外,在这一个存储过程中时间条件是不变,但有多个字符串的条件,例如:字符串=1,字符串=2,这样就需要有两个结果产生!
最后把检索结果以Execl形式存在硬盘里。
如果可以实现的话,必有重谢!
问题点数:100、回复次数:7Top
1 楼vivianfdlpw()回复于 2005-08-02 22:55:27 得分 0
--创建测试环境
create table A(dt datetime,str varchar(20))
insert A
select getdate(),'AAA' union
select getdate(),'BBB' union
select getdate(),'CCC' union
select getdate(),'DDD' union
select getdate(),'EEE' union
select getdate(),'GGG'
go
--创建存储过程
if exists(select 1 from sysobjects where id=object_id('p') and xtype='P')
drop procedure p
go
create procedure p
@startDate datetime, --开始时间
@endDate datetime, --结束时间
@strlist varchar(200), --字符串列表,逗号分割
@filepath varchar(100) --输出文件路径
as
declare @sql varchar(5000)
set @sql='select * from test.dbo.A where dt between convert(datetime,'''+
convert(varchar,@startDate)+''') and convert(datetime,'''+convert(varchar,@endDate)+''') and '+
'charindex('',''+[str]+'','','','+@strlist+','')>0'
set @sql='bcp "'+@sql+'" queryout "'+@filepath+'" -c -T'
--print @sql
exec master..xp_cmdshell @sql
go
--测试
exec p '1900-1-1','2005-8-3','AAA,CCC','c:\data.xls'
--删除测试环境
drop table A
drop procedure pTop
2 楼serversystem()回复于 2005-08-03 10:25:45 得分 0
哥们!给我你的帐号。
另外,我运行这个存储过程后,会在什么地方留下痕迹,如果有痕迹怎么可以把它删除掉。急!Top
3 楼serversystem()回复于 2005-08-03 10:53:24 得分 0
说实话,我对这个不太在行,但是又得应付考试,
这样吧,我把所有的条件都写上,请您帮我写一个吧,
数据库名为:sqldb 表名为:table 日期条件为:2005-01-01至2005-05-01
字符条件为:aaa,bbb,ccc,ddd,eee
将每一个字符条件存为一个文件,例如:aaa.xls bbb.xls ccc.xls ddd.xls eee.xls
请您写一个最后需要执行的存储过程,请详细一些,万分感激!
Top
4 楼vivianfdlpw()回复于 2005-08-03 11:06:22 得分 0
--创建存储过程
if exists(select 1 from sysobjects where id=object_id('p') and xtype='P')
drop procedure p
go
create procedure p
@startDate datetime, --开始时间
@endDate datetime, --结束时间
@strlist varchar(200), --字符串列表,逗号分割
@path varchar(50) --文件保存路径
as
declare @sql varchar(5000)
declare @filepath varchar(50)
while charindex(',',@strlist)>0
begin
if right(@path,1)<>'\'
set @path=@path+'\'
set @filepath=@path+left(@strlist,charindex(',',@strlist)-1)+'.xls'
set @sql='select * from sqldb.dbo.[table] where dt between convert(datetime,'''+
convert(varchar,@startDate)+''') and convert(datetime,'''+convert(varchar,@endDate)+''') and '+
'charindex('',''+[str]+'','','','+left(@strlist,charindex(',',@strlist)-1)+','')>0'
set @sql='bcp "'+@sql+'" queryout "'+@filepath+'" -c -T'
--print @sql
exec master..xp_cmdshell @sql
set @strlist=stuff(@strlist,1,charindex(',',@strlist),'')
end
set @filepath=@path+@strlist+'.xls'
set @sql='select * from test.dbo.A where dt between convert(datetime,'''+
convert(varchar,@startDate)+''') and convert(datetime,'''+convert(varchar,@endDate)+''') and '+
'charindex('',''+[str]+'','','','+@strlist+','')>0'
set @sql='bcp "'+@sql+'" queryout "'+@filepath+'" -c -T'
exec master..xp_cmdshell @sql
go
--调用
exec p ‘2005-01-01','2005-05-01','aaa,bbb,ccc,ddd,eee','c:'Top
5 楼serversystem()回复于 2005-08-03 11:22:37 得分 0
也就是说我只要把条件填写在下面相应位置里即可是吗?
@startDate datetime, --2005-01-01
@endDate datetime, --2005-05-01
@strlist varchar(200), --aaa,bbb,ccc
@path varchar(50) --d:\aaa.xls,d:\bbb.xls,d:\ccc.xlsTop
6 楼serversystem()回复于 2005-08-03 11:24:34 得分 0
我运行这个存储过程后,会在什么地方留下痕迹,如果有痕迹怎么可以把它删除掉。Top
7 楼serversystem()回复于 2005-08-03 15:42:50 得分 0
我将这个在存储过程里执行,报错“在as关键字附近有语法错误”请指教!
if exists(select 1 from sysobjects where id=object_id('p') and xtype='P')
drop procedure p
go
create procedure p
@startDate datetime, --2005-01-01
@endDate datetime, --2005-03-01
@strlist varchar(200), --aaa,bbb,ccc,ddd,eee
@path varchar(50), --d:\aaa.xls,d:\bbb.xls,d:\ccc.xls,d:\ddd.xls,d:\eee.xls
as
declare @sql varchar(5000)
declare @filepath varchar(50)
while charindex(',',@strlist)>0
begin
if right(@path,1)<>'\'
set @path=@path+'\'
set @filepath=@path+left(@strlist,charindex(',',@strlist)-1)+'.xls'
set @sql='select * from a.dbo.[table] where dt between convert(datetime,'''+
convert(varchar,@startDate)+''') and convert(datetime,'''+convert(varchar,@endDate)+''') and '+
'charindex('',''+[str]+'','','','+left(@strlist,charindex(',',@strlist)-1)+','')>0'
set @sql='bcp "'+@sql+'" queryout "'+@filepath+'" -c -T'
--print @sql
exec master..xp_cmdshell @sql
set @strlist=stuff(@strlist,1,charindex(',',@strlist),'')
end
set @filepath=@path+@strlist+'.xls'
set @sql='select * from test.dbo.A where dt between convert(datetime,'''+
convert(varchar,@startDate)+''') and convert(datetime,'''+convert(varchar,@endDate)+''') and '+
'charindex('',''+[str]+'','','','+@strlist+','')>0'
set @sql='bcp "'+@sql+'" queryout "'+@filepath+'" -c -T'
exec master..xp_cmdshell @sql
go
--调用
exec p ‘2005-01-01','2005-05-01','aaa,bbb,ccc,ddd,eee','c:'
Top




