SQL高手高手请进,SQL高手有问题

在SQL如何可以定期导出一个表!
说明:在数据库(ml2),每天00:00导出ssgymc表到D:\
数据库是SQL类型呀,数据库名是:ML2,需要详细操作。

---*/

/**//*--调用示例

p_exporttb @tbname='地区资料',@path='c:',@fname='aa.xls'

--*/

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_exporttb]') and

OBJECTPROPERTY(id, N'IsProcedure') = 1)

drop procedure [dbo].[p_exporttb]

GO

create proc p_exporttb

@tbname sysname, --要导出的表名,注意只能是表名/视图名

@path nvarchar(1000), --文件存放目录

@fname nvarchar(250)='' --文件名,默认为表名

as

declare @err int,@src nvarchar(255),@desc nvarchar(255),@out int

declare @obj int,@constr nvarchar(1000),@sql varchar(8000),@fdlist varchar(8000)

--参数检测

if isnull(@fname,'')='' set @fname=@tbname+'.xls'

--检查文件是否已经存在

if right(@path,1)<>'' set @path=@path+''

create table #tb(a bit,b bit,c bit)

set @sql=@path+@fname

insert into #tb exec master..xp_fileexist @sql

--数据库创建语句

set @sql=@path+@fname

if exists(select 1 from #tb where a=1)

set @constr='DRIVER={Microsoft Excel Driver (*.xls)};DSN='''';READONLY=FALSE'

+';CREATE_DB="'+@sql+'";DBQ='+@sql

else

set @constr='Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties="Excel 5.0;HDR=YES'

+';DATABASE='+@sql+'"'

--连接数据库

exec @err=sp_oacreate 'adodb.connection',@obj out

if @err<>0 goto lberr

exec @err=sp_oamethod @obj,'open',null,@constr

if @err<>0 goto lberr

--创建表的SQL

select @sql='',@fdlist=''

select @fdlist=@fdlist+','+a.name

,@sql=@sql+',['+a.name+'] '

+case when b.name in('char','nchar','varchar','nvarchar') then

'text('+cast(case when a.length>255 then 255 else a.length end as varchar)+')'

when b.name in('tynyint','int','bigint','tinyint') then 'int'

when b.name in('smalldatetime','datetime') then 'datetime'

when b.name in('money','smallmoney') then 'money'

else b.name end

FROM syscolumns a left join systypes b on a.xtype=b.xusertype

where b.name not in

('image','text','uniqueidentifier','sql_variant','ntext','varbinary','binary','timestamp')

and object_id(@tbname)=id

select @sql='create table ['+@tbname

+']('+substring(@sql,2,8000)+')'

,@fdlist=substring(@fdlist,2,8000)

exec @err=sp_oamethod @obj,'execute',@out out,@sql

if @err<>0 goto lberr

exec @err=sp_oadestroy @obj

--导入数据

set @sql='openrowset(''MICROSOFT.JET.OLEDB.4.0'',''Excel 5.0;HDR=YES

;DATABASE='+@path+@fname+''',['+@tbname+'$])'

exec('insert into '+@sql+'('+@fdlist+') select '+@fdlist+' from '+@tbname)

return

lberr:

exec sp_oageterrorinfo 0,@src out,@desc out

lbexit:

select cast(@err as varbinary(4)) as 错误号

,@src as 错误源,@desc as 错误描述

select @sql,@constr,@fdlist

go

*--数据导出EXCEL

导出查询中的数据到Excel,包含字段名,文件为真正的Excel文件

,如果文件不存在,将自动创建文件

,如果表不存在,将自动创建表

基于通用性考虑,仅支持导出标准数据类型

--*/

/**//*--调用示例

p_exporttb @sqlstr='select * from 地区资料'

,@path='c:',@fname='aa.xls',@sheetname='地区资料'

--*/

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_exporttb]') and

OBJECTPROPERTY(id, N'IsProcedure') = 1)

drop procedure [dbo].[p_exporttb]

GO

create proc p_exporttb

@sqlstr sysname, --查询语句,如果查询语句中使用了order by ,请加上top 100 percent,注意,如果导

出表/视图,用上面的存储过程

@path nvarchar(1000), --文件存放目录

@fname nvarchar(250), --文件名

@sheetname varchar(250)='' --要创建的工作表名,默认为文件名

as

declare @err int,@src nvarchar(255),@desc nvarchar(255),@out int

declare @obj int,@constr nvarchar(1000),@sql varchar(8000),@fdlist varchar(8000)

--参数检测

if isnull(@fname,'')='' set @fname='temp.xls'

if isnull(@sheetname,'')='' set @sheetname=replace(@fname,'.','#')

--检查文件是否已经存在

if right(@path,1)<>'' set @path=@path+''

create table #tb(a bit,b bit,c bit)

set @sql=@path+@fname

insert into #tb exec master..xp_fileexist @sql

--数据库创建语句

set @sql=@path+@fname

if exists(select 1 from #tb where a=1)

set @constr='DRIVER={Microsoft Excel Driver (*.xls)};DSN='''';READONLY=FALSE'

+';CREATE_DB="'+@sql+'";DBQ='+@sql

else

set @constr='Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties="Excel 5.0;HDR=YES'

+';DATABASE='+@sql+'"'

--连接数据库

exec @err=sp_oacreate 'adodb.connection',@obj out

if @err<>0 goto lberr

exec @err=sp_oamethod @obj,'open',null,@constr

if @err<>0 goto lberr

--创建表的SQL

declare @tbname sysname

set @tbname='##tmp_'+convert(varchar(38),newid())

set @sql='select * into ['+@tbname+'] from('+@sqlstr+') a'

exec(@sql)

select @sql='',@fdlist=''

select @fdlist=@fdlist+','+a.name

,@sql=@sql+',['+a.name+'] '

+case when b.name in('char','nchar','varchar','nvarchar') then

'text('+cast(case when a.length>255 then 255 else a.length end as varchar)+')'

when b.name in('tynyint','int','bigint','tinyint') then 'int'

when b.name in('smalldatetime','datetime') then 'datetime'

when b.name in('money','smallmoney') then 'money'

else b.name end

FROM tempdb..syscolumns a left join tempdb..systypes b on a.xtype=b.xusertype

where b.name not in

('image','text','uniqueidentifier','sql_variant','ntext','varbinary','binary','timestamp')

and a.id=(select id from tempdb..sysobjects where name=@tbname)

select @sql='create table ['+@sheetname

+']('+substring(@sql,2,8000)+')'

,@fdlist=substring(@fdlist,2,8000)

exec @err=sp_oamethod @obj,'execute',@out out,@sql

if @err<>0 goto lberr

exec @err=sp_oadestroy @obj

--导入数据

set @sql='openrowset(''MICROSOFT.JET.OLEDB.4.0'',''Excel 5.0;HDR=YES

;DATABASE='+@path+@fname+''',['+@sheetname+'$])'

exec('insert into '+@sql+'('+@fdlist+') select '+@fdlist+' from ['+@tbname+']')

set @sql='drop table ['+@tbname+']'

exec(@sql)

return

lberr:

exec sp_oageterrorinfo 0,@src out,@desc out

lbexit:

select cast(@err as varbinary(4)) as 错误号

,@src as 错误源,@desc as 错误描述

select @sql,@constr,@fdlist

go
使用SSIS(SQL SERVER 2005)或者DTS(2000)调用,并设置好运行时间
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-04-23
用BCP+JOB

EXEC master..xp_cmdshell 'bcp test.dbo.admin in d:\temp1.xls -c -q -S"roy" -U"sa" -P"wuxi"'

作业的操作

企业管理器
--管理
--SQL Server代理
--右键作业
--新建作业
--"常规"项中输入作业名称
--"步骤"项
--新建
--"步骤名"中输入步骤名
--"类型"中选择"Transact-SQL 脚本(TSQL)"
--"数据库"选择执行命令的数据库
--"命令"中输入要执行的语句:
EXEC 存储过程名 ... --该存储过程用于创建表

--确定
--"调度"项
--新建调度
--"名称"中输入调度名称
--"调度类型"中选择你的作业执行安排
--如果选择"反复出现"
--点"更改"来设置你的时间安排

然后将SQL Agent服务启动,并设置为自动启动,否则你的作业不会被执行

设置方法:
我的电脑--控制面板--管理工具--服务--右键 SQLSERVERAGENT--属性--启动类型--选择"自动启动"--确定.本回答被提问者采纳
第2个回答  2009-04-10
创建作业调度。

说个方法参考下

SQl Server中
1)打开企业管理器
2)启动sql server 代理.
3)打开数据库ml2.
3)执行表导出向导一直到(中间自己改)
4)勾上保存DTS包,勾上 调度DTS包以后执行 并设置执行频率(点击后面按钮).

这方法简单不用写什么代码。但数据库中表的内容导出放在同一导出文件或同文件(库)同一表项中,内容是不断累加的。
第3个回答  2009-04-13
SQL里面的每一步操作都是有脚本的.右键某个表--所有任务--导出--【设置从哪里导出到哪里】--然后设置 调度
这个很简单,做一个作业、调度和调度内容:
select * from [dbo].[ml2].[ssgymc]
第4个回答  2009-04-11
使用SQL SERVER 的作业,在企业管理器中LOCAL->管理->SQL SERVER代理->作业中,新建作业,在步骤中写备份脚本,在调度选项中新建调度中设置作业的运行周期
备份脚本可以这么写
Declare @Path Nvarchar(2000)
Set @Path =’D:\Backup\ml2_Full_’
+Convert(Nvarchar,Getdate(),112)+’.bak’
Backup Database ml2
To disk=@Path

SQL 排序问题,高手请进
这句的条件就是id=2或id>=2,那输入的结果,肯定就是1.2.3.4.5啊,不是说你写在后面了,他就最后执行啊,你需要了解他的执行顺序啊,如果你想要这样的结果,我怕是1句sql语句不能搞定,我学艺不精,要是我写,只能写procdure...

SQL 排序问题,高手请进
sql语句后面加上 order by id desc 或者 order by id asc

sql语句。有点繁琐,高手请进。
update jit_bzqty set wp='尾数存量' where wp='机台存量' and qty<=1000;

SQL高手请进
第一种是要知道最大重复次数:比如:三次。SELECT A表.*,isnull(c1.b2,'')+isnull(','+c2.b2,'')+isnull(','+c3.b2,'') as b2 from a表 left join (select * from C WHERE C.TMP=1) AS C1 ON C1.A1=A表.a1 left join left join (select * from C WHERE C.TMP=2)...

sql中"select ...like '%%' "问题,高手请进!!
select * from table_name 是查询出table_name 里所有的记录 select * from table_name where column_name like '%%'是查询出table_name表里column_name 类似于'%%'的记录 由于%是代替所有,‘%%’代替所有,但并不表示代替空值,所以后一条记录和前一条的区别是,前一条是查询所有记录,后一条是...

sql求某一字段中最大值和最小值的问题,高手请进!
sql查询字段的最大值使用max()函数。例:select max(a)from table 语句大意:检索表table中a字段中的最大值。

SQL语句插入序号的问题, 高手请进
SQLServer数据库:declare @i int Set @i = 0 Update 表 Set @i = @i + 1,No = @i

SQL 语法错误!!高手来
delete from ***[表名] where 创建日期范围 DELETE语句用来删除已知表中的行。如同UPDATE语句中一样,所有满足WHERE子句中条件的行都将被删除。由于SQL中没有UNDO语句或是“你确认删除吗?”之类的警告,在执行这条语句时千万要小心。如果决定取消Los Angeles办事处并解雇办事处的所有职员,这一卑鄙的...

SQL数据库建库和数据表语句有问题?请高手帮忙解决
针对SQL数据库建库和数据表语句的问题,我们可以按照以下步骤逐一解决:1. 删除已存在的外键约束: ALTER TABLE [dbo].[Elect] DROP CONSTRAINT FK_Elect_Cource; ALTER TABLE [dbo].[Student] DROP CONSTRAINT FK_Student_Depart; ALTER TABLE [dbo].[Teacher] DROP CONSTRAINT FK_Teacher_D...

SQL...关于数据长度的异常,高手进。
nvarchar这个属性没用过,一般都是使用varchar的,varchar的属性mysql4好像是200还是300,mysql5数值就大一些,不知道你是什么数据库!可以试试将字段的属性修改下,让他变长,例如先替换为text格式,看看输入结果是否还是短,如果是,那么应该是你的程序中的问题,可能是你程序中处理过该值!

相似回答