SQLServer导出数据时出错

Borsher 2005-04-13 12:11:18
SQLServer导出数据时出错

程序中要把SQL Server中的几个表导出来,保存为一个文件,以便传递数据。

我首先用存储过程CreateTempAppDB建立一个数据库TempAppDB,把数据用Select * Into 命令保存到该数据库里。然后用Backup Database命令将该数据库备份为一个文件,最后用Drop Database TempAppDB删掉新建的数据库,导出即告完成。

但是这种导出操作往往只能成功执行一次,当再次导出时,就会出错,显示“内部查询处理器错误:查询处理器在执行过程中遇到意外错误。(错误号 8630)”,但有时又可以连续导出,例如,把SQL Server停止后再启动,或执行一些其他操作,然后又能导出了。

*--------------------------------------------------
我知道这样“导出”不是一下好办法,不知各位有什么好的建议。

*--------------------------------------------------
我曾经考虑过用OpenRowSet或OpenDataSource命令将数据导出为一个Access数据库,但实际操作过程当中,效果也不太好。(不能用Select * Into ……)

**************************************************
部分存储过程代码:

CREATE Procedure CreateTempAppDB
As

-- 建立一个临时数据库
If Exists(
Select * From Master..SysDatabases
Where Name = 'TempAppDB')
Drop Database TempAppDB

Create Database TempAppDB
GO

*--------------------------------------------------
CREATE Procedure ProjectExport
@tcPjtIDStr VarChar(4000),
@tcFileName VarChar(300)
As

-- 检查临时数据库是否存在
If Not Exists(
Select * From Master..SysDatabases
Where Name = 'TempAppDB')
RaisError('The specified database does not exists', 11, 1)

-- 先把要导出的项目的ProjectID串解析并保存到一个临时表里
Create Table #TempPjtIDList(
ProjectID UniqueIdentifier Null)

Declare @lcProjectID UniqueIdentifier,
@lnStartPosition SmallInt,
@lnEndPosition SmallInt

Set @lnStartPosition = 1
While @lnStartPosition < DataLength(@tcPjtIDStr)
Begin
Set @lnEndPosition = CharIndex(',', @tcPjtIDStr, @lnStartPosition)
Set @lcProjectID = SubString(@tcPjtIDStr, @lnStartPosition, @lnEndPosition - 1)
Set @lnStartPosition = @lnEndPosition + 1

Insert Into #TempPjtIDList(ProjectID) values(@lcProjectID)
End

--************************************************************--
Select *
Into TempAppDB..Project
From Project
Where ProjectID In (Select ProjectID From #TempPjtIDList)
Or MainProjectID In (Select ProjectID From #TempPjtIDList)

-- (就在执行上边这条命令时出错。)
……
……
……
……

--************************************************************--
Backup Database TempAppDB
To Disk = @tcFileName
With Format

Drop Database TempAppDB
GO




...全文
547 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Borsher 2005-05-02
  • 打赏
  • 举报
回复
致 Hopewell_Go(好的在后頭﹗希望更好﹗﹗)

谢谢您的关注。我去试一下。
不过,我记得,SQL Server的联机说明书里说,在存储过程内建的临时表,在存储过程执行完后,会自动删掉。
Borsher 2005-05-02
  • 打赏
  • 举报
回复
致:gwfyjthink(小顾)

我需要在软件运行时,根据用户的选择把几个表中的部分数据导出为一个文件,日后还可以再导入进来。根据目前我所掌握的DTS知识,它无法完成这种操作。我总不能直接给用户打开一个DTS向导界面吧?

gwfyjthink 2005-05-02
  • 打赏
  • 举报
回复
為什麼,不用DTS倒數據啊.那樣比較方便
Well 2005-05-02
  • 打赏
  • 举报
回复
還有在操作的是時候臨時表不能建兩次。
當你第一次運行此程序代碼時創建一個臨時表,一定要將刪除。
否則就會出錯。
我以前出現過此類型的情況。
還有是不是因為你導出數據的名字一樣而發生的沖突啊
Borsher 2005-04-24
  • 打赏
  • 举报
回复
up
Borsher 2005-04-18
  • 打赏
  • 举报
回复
各位,谁遇到过这种情况,有什么好的建议,请不吝赐教。
Borsher 2005-04-14
  • 打赏
  • 举报
回复
谢谢各位。

------------------------------------------------------------
我要实现的是程序的导入导出功能。要把几个表中的部分数据有选择的导出为一个文件,需要时还能再导入进去。这些操作必须在程序内部完成。

------------------------------------------------------------
致 Mryu666:因为要在程序内部完成,所以无法用导入导出向导。用DTS包好像不能过滤数据(有选择的导出)。而且我用的是MSDE。
------------------------------------------------------------
致 Hopewell_Go(一定好起來):虛擬表#TempPjtIDList在临时数据库里(TempDB),而我建的数据库是TempAppDB。
Well 2005-04-14
  • 打赏
  • 举报
回复
我想是不是在你將臨時數據庫刪了。
他的虛擬表#TempPjtIDList是不是也不存在。

查看虛擬表是否存在
use tempdb
select name from sysobjects where xtype='U'
Mryu666 2005-04-14
  • 打赏
  • 举报
回复
你的数据必须保存为数据库形式吗?你不可以把要保存的表保存为excel吗?它也能在导回到数据库里!只要里面的数据主键和要导入的不重复!
那样一可以用导入导出向导导入选择的时候选择excel格式的,选择要保存文件的位置,按提示作完,并保存DTS包,每次你要 导这个表的时候执行一下这个包就可以了!
(如果每次导出的数据想删除原来导出的数据,你在选择原表和视图里里你选择的表有个转换,按他里面选择删除目标中的行就行了)。
lionlsl 2005-04-14
  • 打赏
  • 举报
回复
如果是用delpi,用一个adoquery,在sqlstring写上select * from 多个表.
再用adoquery.loadtofile();
sprrav 2005-04-14
  • 打赏
  • 举报
回复
up
Borsher 2005-04-13
  • 打赏
  • 举报
回复
谢谢邹建,估计不是这个原因。不过,我会试试。
zjcxc 元老 2005-04-13
  • 打赏
  • 举报
回复
--估计是存储过程处理还没完成吧

--从效率上一讲,建议把这句改一下:
Select *
Into TempAppDB..Project
From Project
Where ProjectID In (Select ProjectID From #TempPjtIDList)
Or MainProjectID In (Select ProjectID From #TempPjtIDList)

--改为下面的:
Select *
Into TempAppDB..Project
From Project
Where exists(Select * From #TempPjtIDList where ProjectID in(a.ProjectID ,a.MainProjectID ))

34,590

社区成员

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

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