我从本地的Sql Server创建了一个Linked Server,如下所示
http://sqlserverplanet.com/dba/local-linked-server
但是,当我尝试在链接服务器中执行存储过程时,它会抛出:
Deferred prepare could not be completed
错误和无效的对象名称'表名'
我从本地的Sql Server创建了一个Linked Server,如下所示
http://sqlserverplanet.com/dba/local-linked-server
但是,当我尝试在链接服务器中执行存储过程时,它会抛出:
Deferred prepare could not be completed
错误和无效的对象名称'表名'
你错过了对象名称中的某些内容吗?它应该总是像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
即使您在查询中错误地命名了列,您也会看到此错误。例:
select *
from openquery(
lnksrv
,'select top 10 * from db.schema.table where colunm = 10'
)
列名是 column
不是 colunm
。
底线是先检查要发送到远程服务器的实际查询是否正确,然后将其包装好 openquery
并重新测试。
对我来说同样的问题:我解决了它只是修复了没有正确命名的“目标”对象。
就我而言,我一直在寻找 [testDb].[Business.Customer]
表,但正确的名称是 [testDb].[Business].[Customer]
...和你的错误相同:
Il提供程序OLE DB“SQLNCLI10”每个il服务器collegato “RIBOWEB10 \ SQLEXPRESS”ha restituito il messaggio“推迟准备 无法完成。“
我认为SQL Server尝试动态解析与真实对象不直接匹配的名称,但不确定。
很简单,我希望这有助于:)
尝试通过链接服务器进行查询时遇到了同样的错误。但是,我在目标服务器上查询视图,而不是存储过程。
目标服务器的视图是这样创建的:
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
必须是原始视图的某些元数据问题。
希望这对你有所帮助!