FIX: 錯誤訊息,當您執行查詢對連結伺服器,您在中建立 SQL Server 2005:"Statement(s) 不準備"和"與資料表名稱或別名查詢中使用的名稱不相符的資料行前置詞 '<column_prefix_name>'"

文章翻譯 文章翻譯
文章編號: 936223 - 檢視此文章適用的產品。
Bug #: 50001186 (SQL Hotfix)
全部展開 | 全部摺疊

在此頁中

徵狀

考慮下列案例。在 Microsoft SQL Server 2005 中,請使用 SQL 原生用戶端 OLE DB 提供者 (SQLNCLI) 來建立連結的伺服器。連結的伺服器會連結到已安裝 Microsoft SQL Server 2000 的伺服器。在這種情況下您收到下列錯誤訊息,當您對連結伺服器執行查詢時:
錯誤訊息 1
msg 8180,層級 16,狀態 1,行 1
無法準備陳述式。
錯誤訊息 2
msg 107,層級 16,狀態 2,行 1
資料行前置詞 ' <column_prefix_name> ' 不符合的資料表名稱或別名在查詢中使用的名稱。


附註在 SQL Server 2008 中也會發生這個問題。如果您遇到這個問題,當您連線到 SQL Server 2008 中的 SQL Server 2000 伺服器時,您必須啟用追蹤旗標 4112 如果要解決這個問題。如需詳細資訊請參閱 < 其他相關資訊 > 一節。

發生的原因

SQL Server 2005 會產生具有遠端查詢的執行計劃,就會發生這個問題。SQL Server 2005 必須執行遠端查詢對 SQL Server 2000 中擷取所需的資料。SQL Server 2000 無法處理遠端查詢。因此,在 SQL Server 2000 中發生錯誤 107。然後,錯誤 107 會傳播到 SQL Server 2005。因此,在 SQL Server 2005 中發生錯誤 107,而且在 SQL Server 2005 中發生錯誤 8180。

解決方案

累積更新資訊

這個問題的修正程式先於發行累計更新 2。如需有關如何取得此累積更新套件的 SQL Server 2005 Service Pack 2 的詳細資訊,按一下 [下列面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
936305SQL Server 2005 Service Pack 2 的累積更新套件 2
附註因為組建是累計,每個新的修正程式版本包含所有 Hotfix 及先前的 SQL Server 2005 隨附所有安全性修正程式都修正發行。Microsoft 建議您考慮安裝最新的修正程式發行版本包含此 Hotfix。如需詳細資訊,請按一下下列的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
937137SQL Server 2005 會建置 SQL Server 2005 Service Pack 2 已發行之後所發行
Microsoft SQL Server 2005 的 Hotfix 會建立特定的 SQL Server Service Pack。您必須將 SQL Server 2005 Service Pack 2 Hotfix 套用至的 SQL Server 2005 Service Pack 2 安裝。預設狀況下,在 SQL Server Service Pack 中提供任何 Hotfix 包含在下一個 SQL Server Service Pack。

其他可行方案

如果要解決這個問題,使用 Microsoft OLE DB 提供者的 ODBC 建立 SQL Server 2000 對連結的伺服器。

狀況說明

Microsoft 已確認<適用於>一節所列之 Microsoft 產品確實有此問題。

其他相關資訊

累積更新套件 (組建 3175) 的 SQL Server 2005 SP2 和 SQL Server 2008 兩者引入追蹤旗標 4112。累積更新套件 (組建 3175) 申請 SQL Server 2005 SP2 之後,您必須啟用追蹤旗標 4112 如果要解決這個問題。有關如何啟用追蹤旗標在 SQL Server 2005 中的,請參閱 < 備註 > 一節,下列的 Microsoft 開發 o 人 h 員 ? 工 u 具 ? 網路 (MSDN) Web 站台的:
http://msdn2.microsoft.com/en-us/library/ms188396.aspx

如果要重現問題的步驟

  1. 啟動 SQL Server 管理 Studio,然後連線至 SQL Server 2005 的執行個體。
  2. 建立新的查詢,然後執行下列陳述式。
    EXEC sp_addlinkedserver
    @server = '<LinkedServerName>', 
    @provider = 'SQLNCLI', 
    @srvproduct = '', 
    @datasrc = '<InstanceName>', 
    @catalog = '<DatabaseName>' 
    
    exec sp_serveroption
    @server = '<LinkedServerName>' 
    ,@optname = 'RPC' 
    ,@optvalue = 'TRUE'
    exec sp_serveroption
    @server = '<LinkedServerName>' 
    ,@optname = 'RPC OUT' 
    ,@optvalue = 'TRUE'
    
    
    DECLARE @supervisorID varchar(40)
    set @supervisorID = 'Volume Discount'
    
    SELECT DISTINCT J.STOR_ID
    FROM   [<LinkedServerName>].[<DatabaseName>].DBO.DISCOUNTS J
    WHERE  J.DISCOUNTTYPE = @supervisorID
           AND J.DISCOUNT = (SELECT MAX(B.DISCOUNT)
                             FROM   [<LinkedServerName>].<DatabaseName>.DBO.DISCOUNTS B
                             WHERE  B.DISCOUNTTYPE = J.DISCOUNTTYPE)
    
    GO
    
    備忘稿
    • <LinkedServerName>為連結伺服器名稱的預留位置。
    • <InstanceName>為連結伺服器執行個體名稱的預留位置。
    • <DatabaseName>為資料庫名稱的預留位置。
執行這些陳述式之後您便會收到 < 徵狀 > 一節中所述的錯誤訊息。

屬性

文章編號: 936223 - 上次校閱: 2010年2月2日 - 版次: 2.0
這篇文章中的資訊適用於:
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Standard X64 Edition
  • Microsoft SQL Server 2005 Standard Edition for Itanium Based Systems
  • Microsoft SQL Server 2005 Enterprise X64 Edition
  • Microsoft SQL Server 2005 Enterprise Edition for Itanium Based Systems
  • Microsoft SQL Server 2008 Developer
  • Microsoft SQL Server 2008 Enterprise
  • Microsoft SQL Server 2008 Standard
  • Microsoft SQL Server 2008 Web
  • Microsoft SQL Server 2008 Workgroup
關鍵字:?
kbmt kbsql2005engine kbexpertiseadvanced kbfix kbpubtypekc kbqfe KB936223 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:936223
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com