0

我有一个 10 页的程序,它将一个 litespeed 压缩备份文件(从不同的服务器带到网络共享)提取到 3 个文件中,恢复文件列表和标题;然后将其还原到本地数据库。当我尝试在 SQL Server 2008 服务器上运行该过程时,它失败并出现以下错误,而在 SQL Server 2005 服务器上运行该过程时,它运行得很好并将其恢复到本地数据库。

错误:列名或提供的值数与表定义不匹配。

完整错误:

Extracting differential LiteSpeed backup into SQL Server backup files: Started
Extracting differential LiteSpeed backup into SQL Server backup files: Complete
Msg 213, Level 16, State 7, Line 1
Column name or number of supplied values does not match table definition.
Msg 3013, Level 16, State 1, Line 1
RESTORE FILELIST is terminating abnormally.
Msg 213, Level 16, State 7, Line 1
Column name or number of supplied values does not match table definition.
Msg 3013, Level 16, State 1, Line 1
RESTORE HEADERONLY is terminating abnormally.

关于为什么它在 SQL Server 2008 上失败的任何想法?

4

1 回答 1

1

因为您拥有的 Litespeed 版本(或您自己的存储过程)正在构建一个 #temp 表来转储RESTORE命令的结果,并且代码不考虑版本。

如果您将2005 年的文档2008 年的文档进行比较RESTORE FILELISTONLY,您会看到 2008 年添加了一个名为的新列TDEThumbprint(可能还有其他更改;我看起来不是很努力)。

同样,将2005 文档2008 文档进行比较RESTORE HEADERONLY,还有一个名为 的附加列CompressedBackupSize

插入失败是因为用于转储此命令结果的 #temp 表是为 2005 版本构建的,并且缺少附加列。当#temp 表有 15 列并且您尝试将 16 列填充到其中时,SQL Server 不喜欢它。

如果是您的过程创建了#temp 表,您需要根据版本创建过程分支,或者创建特定于版本的过程,并在运行插入之前使用具有适当列数的表。

如果不是您的代码,那么您应该与 Dell/Quest 讨论此问题。他们很可能已经修复了它,但是您没有最新版本的 Litespeed ...

于 2013-04-04T22:22:03.597 回答