将本地数据库用作链接服务器时出现“延迟准备无法完成”错误

时间:2013-03-01 12:40:07

标签: sql-server sql-server-2008 stored-procedures linked-server

我从本地Sql Server创建了一个链接服务器,如

中所示

http://sqlserverplanet.com/dba/local-linked-server

但是,当我尝试在链接服务器中执行存储过程时,它会抛出:

Deferred prepare could not be completed

错误和无效的对象名称'表名'

5 个答案:

答案 0 :(得分:12)

您是否错过了对象名称中的某些内容。它应该总是像Database.User.ObjectName(例如Northwind.dbo.Customers)

通过链接服务器运行查询时提供完整的对象名称。

在链接服务器上执行时,查询存储过程可能是这样的:

Select  *
From    OPENQUERY([COM2\SQLEXPRESS], 'Exec Northwind.dbo.CustOrderHist ''CUST1''') as TB1

执行存储过程时,请检查SET FMTONLY OFF等选项。

请点击此链接获取OPENQUERY:http://msdn.microsoft.com/en-us/library/ms188427.aspx

答案 1 :(得分:5)

即使您在查询中错误地命名了列,您也会看到此错误。例如:

select *
from openquery(
     lnksrv
    ,'select top 10 * from db.schema.table where colunm = 10'
)

,列名为column,而不是colunm

底线是先检查要发送到远程服务器的实际查询是否正确,然后将其包装在openquery中并重新测试。

答案 2 :(得分:1)

尝试通过链接服务器进行查询时遇到了同样的错误。但是,我在目标服务器上查询视图,而不是存储过程。

目标服务器的视图是这样创建的:

CREATE VIEW vABC AS
    SELECT ... FROM Table1
    UNION ALL
    SELECT ... FROM Table2

为了解决这个问题,我做了一个alter view,并将两个UNION语句包装在子查询中,如下所示:

CREATE VIEW vABC AS
    SELECT * FROM (
        SELECT ... FROM Table1
        UNION ALL
        SELECT ... FROM Table2
    ) T

原始视图必须存在元数据问题。

希望这能帮到你!

答案 3 :(得分:1)

对我来说同样的问题:我解决了它只是修复了没有正确命名的“目标”对象。

在我的情况下,我正在搜索[testDb].[Business.Customer]表,但正确的名称是[testDb].[Business].[Customer] ...与您的错误相同:

  

Il提供者OLE DB“SQLNCLI10”每个il服务器collegato   “RIBOWEB10 \ SQLEXPRESS”ha restituito il messaggio“推迟准备   无法完成。“。

我认为SQL Server会尝试动态解析与真实对象不直接匹配的名称,但不确定。

很简单,我希望这会有所帮助:)

答案 4 :(得分:0)

我遇到了同样的问题,我遇到的问题是链接服务器连接中指定的用户无权访问我尝试访问的数据库。