SQLServer导出数据时出错
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