徵兆
請試想下列案例:
-
你有一台連結的 Microsoft SQL Server 2008 R2 伺服器。
-
連結伺服器上有一個表格,欄位為 SMALLDATETIME 類型。
-
你執行 INSERT 或 INSERT INTO 語句,將包含 DATETIME 類型資料的紀錄插入資料表。
在這種情況下,該陳述失敗。 此外,您收到下列錯誤訊息:
OLE DB 提供者「SQLNCLI10」對於連結伺服器「LinkServerName 」回傳訊息:「多步驟 OLE DB 操作產生錯誤。 檢查每個 OLE DB 狀態值(如果有的話)。 但沒有進行任何工作。」訊息 7344,第 16 層,狀態 1,第 1 行 連結伺服器「LinkServerName」的 OLE DB 提供者「SQLNCLI10」無法插入資料表「TableName」 ,因為欄位為「ColumnName」。 轉換失敗,因為資料值超出提供者所使用的資料型態。
原因
此問題是因為 SQL Server 中的資料型別映射問題所致。
解決方案
累積更新資訊
SQL Server 2008 R2 Service Pack 2
此問題的修正最初於累積更新 3 中釋出。 欲了解更多如何取得 SQL Server 2008 R2 服務包 2 累積更新套件的資訊,請點擊以下文章編號以瀏覽 Microsoft 知識庫中的文章:
2754552 SQL Server 2008 R2 服務包 2 的累積更新包 3 備註:由於建置是累積的,每個新修正版本都包含了先前 SQL Server 2008 R2 服務包 2 修正版本中包含的所有熱修補與安全修補。 我們建議您考慮套用包含此熱修正的最新修正版本。 如需詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:
2730301 SQL Server 2008 R2 建置版本是在 SQL Server 2008 R2 服務包 2 發布之後推出的
狀態
Microsoft 已確認<適用於>一節所列的 Microsoft 產品確實有上述問題。
因應措施
要解決這個問題,請採用以下其中一種方法:
-
將 DATETIME 類型資料鑄造成語句中的 SMALLDATETIME 類型。
-
將連結伺服器上的 SMALLDATETIME 類型欄位改為 DATETIME 類型。