邹版主,这个存储过程为什么第一次成功第二次就不成功?

反复徘徊 2006-03-04 11:29:44
--??对一个表做第一次是成功,做第二次的时候就出问题
--0x80040E14 Microsoft JET Database Engine 字段定义语法错误。
--

--下面的存储过程可以导出数据为真正的excel文件

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

/*--数据导出EXCEL

导出表中的数据到Excel,包含字段名,文件为真正的Excel文件
,如果文件不存在,将自动创建文件
,如果表不存在,将自动创建表
基于通用性考虑,仅支持导出标准数据类型

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

/*--调用示例

p_exporttb @tbname='地区资料',@path='c:\',@fname='aa.xls'
--*/
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 8.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

/*--如果覆盖已经存在的表,就加上下面的语句
--创建之前先删除表/如果存在的话
select @sql='drop table ['+@tbname+']'
exec @err=sp_oamethod @obj,'execute',@out out,@sql
--*/

--创建表的SQL
select @sql='',@fdlist=''
select @fdlist=@fdlist+',['+a.name+']'
,@sql=@sql+',['+a.name+'] '
+case
when b.name like '%char'
then case when a.length>255 then 'memo'
else 'text('+cast(a.length as varchar)+')' end
when b.name like '%int' or b.name='bit' then 'int'
when b.name like '%datetime' then 'datetime'
when b.name like '%money' then 'money'
when b.name like '%text' then 'memo'
else b.name end
FROM syscolumns a left join systypes b on a.xtype=b.xusertype
where b.name not in('image','uniqueidentifier','sql_variant','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 8.0;HDR=YES;IMEX=1
;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
...全文
137 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
fdsfasdfdas 2006-03-04
  • 打赏
  • 举报
回复
up
  • 打赏
  • 举报
回复
学习!
zhouhaihe 2006-03-04
  • 打赏
  • 举报
回复
up
wgsasd311 2006-03-04
  • 打赏
  • 举报
回复
--try
--下面的存储过程可以导出数据为真正的excel文件
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

/*--数据导出EXCEL

导出表中的数据到Excel,包含字段名,文件为真正的Excel文件
,如果文件不存在,将自动创建文件
,如果表不存在,将自动创建表
基于通用性考虑,仅支持导出标准数据类型

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

/*--调用示例
p_exporttb @tbname='test',@path='c:\',@fname='aa.xls'
--*/
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 8.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

/*--如果覆盖已经存在的表,就加上下面的语句
--创建之前先删除表/如果存在的话
select @sql='drop table ['+@tbname+']'
exec @err=sp_oamethod @obj,'execute',@out out,@sql
--*/
select @sql='drop table ['+@tbname+']'
exec @err=sp_oamethod @obj,'execute',@out out,@sql
--创建表的SQL
select @sql='',@fdlist=''
select @fdlist=@fdlist+',['+a.name+']'
,@sql=@sql+',['+a.name+'] '
+case
when b.name like '%char'
then case when a.length>255 then 'memo'
else 'text('+cast(a.length as varchar)+')' end
when b.name like '%int' or b.name='bit' then 'int'
when b.name like '%datetime' then 'datetime'
when b.name like '%money' then 'money'
when b.name like '%text' then 'memo'
else b.name end
FROM syscolumns a left join systypes b on a.xtype=b.xusertype
where b.name not in('image','uniqueidentifier','sql_variant','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 8.0;HDR=YES;IMEX=1
;DATABASE='+@path+@fname+''',['+@tbname+'$])'

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

return

lberr:
exec sp_oageterrorinfo 0,@src out,@desc out
select '1'
lbexit:
select cast(@err as varbinary(4)) as 错误号
,@src as 错误源,@desc as 错误描述
select @sql,@constr,@fdlist
go

wgsasd311 2006-03-04
  • 打赏
  • 举报
回复
--try
--下面的存储过程可以导出数据为真正的excel文件
select * from authors
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

/*--数据导出EXCEL

导出表中的数据到Excel,包含字段名,文件为真正的Excel文件
,如果文件不存在,将自动创建文件
,如果表不存在,将自动创建表
基于通用性考虑,仅支持导出标准数据类型

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

/*--调用示例
p_exporttb @tbname='test',@path='c:\',@fname='aa.xls'
--*/
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 8.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

/*--如果覆盖已经存在的表,就加上下面的语句
--创建之前先删除表/如果存在的话
select @sql='drop table ['+@tbname+']'
exec @err=sp_oamethod @obj,'execute',@out out,@sql
--*/
select @sql='drop table ['+@tbname+']'
exec @err=sp_oamethod @obj,'execute',@out out,@sql
--创建表的SQL
select @sql='',@fdlist=''
select @fdlist=@fdlist+',['+a.name+']'
,@sql=@sql+',['+a.name+'] '
+case
when b.name like '%char'
then case when a.length>255 then 'memo'
else 'text('+cast(a.length as varchar)+')' end
when b.name like '%int' or b.name='bit' then 'int'
when b.name like '%datetime' then 'datetime'
when b.name like '%money' then 'money'
when b.name like '%text' then 'memo'
else b.name end
FROM syscolumns a left join systypes b on a.xtype=b.xusertype
where b.name not in('image','uniqueidentifier','sql_variant','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 8.0;HDR=YES;IMEX=1
;DATABASE='+@path+@fname+''',['+@tbname+'$])'

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

return

lberr:
exec sp_oageterrorinfo 0,@src out,@desc out
select '1'
lbexit:
select cast(@err as varbinary(4)) as 错误号
,@src as 错误源,@desc as 错误描述
select @sql,@constr,@fdlist
go

实验题目:数据库设计 实验目的:掌握数据库的设计方法 实验内容:网上论坛的数据库设计 需求 : (1)论坛可以分为多个版块,如 C#版块、C++版块、Java 版块等, 注册用户可以在版块中发帖和跟贴。版块的数量和名称尚未 确定。 (2)每个注册用户拥有一定数量的可用分和专家分,不区分是在 哪个版块的分数。 (3)每个用户注册时自动得到可用分 3000 分,发帖时可以设定 这个帖子的分数是多少,分数从可用分中扣除。 (4)每次发帖可以设置的分数最大值为 100。 (5)用户每天第一次登录时自动增加可用分 20 分,当天重复登 录不再增加可用分。 (6)发帖人问题得到满意答复后结帖,结帖时根据跟贴用户的回 答,由发帖人决定给予的分数,跟贴人得到的分数记入其专 家分。 (7)发帖人在这个帖子中给予跟贴人的分数总和不能超过发帖时 设定的分数。 (8)发帖人不可以给自己专家分。 (9)用户根据专家分的多少确定其用户等级,如刚登录时专家分 为 0 分,为初级用户;得到 200 分后为一级用户;500 分后 为二级用户……。用户等级的名称及分数段尚未确定。 (10)系统有超级用户、大版主、分版版主三种管理员,超级用 户系统初始化时设定。 (11)每个注册用户都可以申请分版版主,申请后由注册用户投 票,投票期为 30 天,支持票数达到最近 30 天登录过的用户 数的 10%以上,且反对票数不超过总投票数的 30%,并由大 版主或超级用户审核后,获得分版版主资格。 (12)超级用户可以指定大版主,大版主不一定是分版版主,大 版主可以有多名。 (13)每个版的分版版主可以有多名,版主可以删除违反版规的 帖子,帖子删除后,发帖人发帖时扣除的可用分不再恢复; 如果删除的帖子已经结帖,跟贴人得到的专家分要扣除。 (14)对于分版版主无故删除帖子的行为,用户可以向大版主投 诉,由大版主决定删除是否违规;如果确属违规删除,则恢 复以删除的帖子,并恢复分数。 (15)对于投诉严重的分版版主,或不能承担版主责任的分版版 主,大版主可以取消其版主资格;超级用户同样也可以取消 大版主的资格。 提交内容:实验报告书,提交电子版,不需要使用实验报告纸。 报告内容: (1)需求分析部分:用自然语言描述系统需求,要求至少包含本文 "需求"部分所包含的 1~9 部分功能,第 10 及以后部分为选做。 画出数据流图。 (2)概念结构设计:根据数据流图,确定需要存储的实体,画出分 E-R 图;将分 E-R 图集成为初步 E-R 图,并设计基本 E-R 图。 (3)逻辑结构设计:将 E-R 图转换为关系模型,并进行必要的优化, 设计必要的用户子模式。 (4)物理设计(选做):确定必要的存取方法,确定存储结构和系统 配置。
" " " 校园网络安全防护设计与实现实训报告 目 录 一、项目背景 3 二、需求分析 3 1、项目目标 3 2、管理目标 4 3、条件与限制 4 三、系统设计 4 1、管理 4 2、服务器配置 5 3、网络安全产品 5 四、总结 6 五、参考文献 7 一、项目背景 论坛又名网络社区,从最初的电子公告板发展到现在,已经成为网民生活中的一部分 ,它的主要功能就是可以使用户自由发帖自由回帖,涉及范围广泛,具有极强的流通性 和交互性,用户在BBS站点上可以获得各种信息服务、发布信息、进行讨论、聊天等等。 论坛真正崛起于中国于1997年,随着新浪、搜狐、网易三大门户的崛起,论坛强大的 发展性被人们所认同,各种论坛如雨后春笋的出现,真正拉开中文论坛新时代!各个领 域都逐渐出现论坛,如地方论坛,小说论坛,软件论坛,炒股论坛等等,成为互联网不 可或缺的一部分。正因为论坛的普及,也使得各种各样的"事件"被网民知晓,如"馒头血 案"、虐猫事件等等。 论坛也有不同的分类,有综合性论坛,专题性论坛,教学性论坛,推广性论坛,交流 性论坛等等而其涉及的领域也是非常的全面,包含了社会,人文,娱乐,体育,经济, 军事,历史,女人,汽车,健康,旅游,科技,城市,校园,房产,视频,图片等融合 在一起。 对于论坛的未来,它已不再像从前那样炙手可热,它的高潮已过,但不会消亡,为了 "生存",它需要使界面更加友好,信息不再存储于一个中央处理器上,而是分散再网络 当中,它已成为不可缺少的一部分,同时也依赖于用户的更多实时交互。 二、需求分析 1、项目目标 本论坛管理系统实现后,能够通过网站论坛结识更多的网络好友,挖掘一下到底是什 么使得论坛能获得今天的举足轻重的地位。并且了解怎样对论坛进行管理。 系统开发的 总体是实现社交网站系统化、规范化和自动化从而达到高效率的目的。能够方便论坛网 站快捷的管理社交网站信息以及能够方便快捷的查看修改个人信息,从论坛网站而提高 工作效率。 2、管理目标 论坛的管理要系统,分级要明确。尤其是管理层面上的人员,要保证他们的权限和职 权范围。保证他们的安全性和上网素质。在论坛内容上要尤为加强管理,尤其是要防止 灌水,广告等不良信息的发布和传播。对于安全层面上的需求比较高,要防止被攻击和 篡改,导致论坛无法到达论坛应有的功能。 3、条件与限制 (1)论坛应该是个人数比较庞大的社会群体在网络上的集合,而本论坛系统在人数 较少的情况下运作。 (2)在实现上述管理和发布的工作过程时,需考虑相关的合法性证明。 三、系统设计 1、管理 论坛的管理主要在于管理人员对于权限的分配。论坛的最高权限极为重要。我们的论 坛设一个最高权限,每个版块分设一个版主。最高权限可以给与用户版主的权限。而版 主拥有其所在版块的高级权限。版主可以在其板块下删除帖子,回复,评论,和封用户 的IP等(封闭此用户的发帖权限)。普通用户的基本权限是可以下载版块内的附件和在 每个版块内发帖子,和对每个帖子发表评论。对于用户随意灌水和机器人发帖,我们的 论坛设置了验证码机制。第一次发帖(回复)可以正常,在五分钟内再次发帖需要填写 验证码,如果发现多次发表灌水帖,版主直接封IP。我们还要坚决屏蔽和删除广告,我 们选择使用软件来动态监管。此外,对于不正常帖子的发表,版主一般应该24小时内删 除有害信息,有的严重内容则要求更高,要在尽可能短的时间里删除不良帖子,其原则 是:做到既要果断迅速,又要灵活处理;既要让网友心情舒畅地参与讨论与交流,又要 让他们遵守论坛的管理条例。 2、服务器配置 (1)服务器结构图 图 1 (2)服务器配置 CPU:Intel 至强4四核八线程)*2颗 内存:16G 硬盘空间:500G SATA 操作系统:windows server 带宽:10MB 软件和语言环境:discuz Apache php mysql 3、网络安全产品 1、Virus驱逐舰 这是一款我个人感觉比较好的杀毒软件,用于服务器上的杀毒。驱逐舰信息技术有限 公司是国际级信息技术开发商,并在防病毒、涉密安全和云计算等领域处于国际先进水 平,已形成以驱逐舰杀毒软件,专注于孩子上网管理的绿色上网软件等产品为代表的多 条产品线。是集研发、教学、生产制造、综合服务于一体的信息安全产品与服务的IT企 业。杀毒软件的选择,目的在于消除电脑病毒,消除木马,和删除恶意软件。他们集成 了识别和监控等功能,为服务器的正常运行保驾护航。对于我们的服务器来说,不能保 证站长和网管7X24小时在线。所以,我们必须使用一些安全防护软件来进行自动监控。 及时进行更新和漏洞的修复。 2、服务器安全狗 服务器安全狗是一款集服务器安全防护和安全管理为一体的综合性服务工具。作为国 内首款支持Windows全系列操作系统(Windows2

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧