2013-04-04 64 views
0

我有一個10頁的過程,可以將litespeed壓縮的備份文件(從不同服務器上的網絡共享)提取到3個文件中,恢復文件列表和標題;然後將其恢復到本地數據庫。當我嘗試在SQL Server 2008服務器上運行該過程時,它失敗,出現以下錯誤,而在SQL Server 2005服務器上運行時,它運行得很好,並將其恢復到本地數據庫。RESTORE上的Litespeed錯誤 - 2005年的作品,2008年的失敗

Error: Column name or number of supplied values does not match table definition.

完整的錯誤:

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上有什麼想法?

回答

1

因爲Litespeed的版本(或您自己的存儲過程)正在構建#temp表以轉儲RESTORE命令的結果,並且代碼沒有考慮版本。

如果比較2005 documentation2008 documentationRESTORE FILELISTONLY,你會看到,在2008年增加了一個名爲TDEThumbprint新列(可能還有其他的變化;我不看很辛苦)。

類似地,將2005 docs2008 docsRESTORE HEADERONLY進行比較,存在稱爲CompressedBackupSize的附加列。

插入失敗,因爲用於轉儲此命令結果的#temp表是爲2005版本構建的,並且缺少附加列。當#temp表有15列,並且你試圖填充16列時,SQL Server不喜歡它。

如果是您的過程創建#temp表,則需要根據版本使您的過程分支,或創建版本特定的過程,並在運行插入之前使用具有適當列數的表。

如果不是您的代碼,那麼您應該與Dell/Quest談談此事。這很可能他們已經修復了它,但是你沒有最新版本的Litespeed ...

+0

在閱讀這個答案之前,我發現了同樣的事情,但是非常感謝您花時間回答這個問題! – svon 2013-05-24 16:54:42