8

Tôi tạo ra một máy chủ liên kết từ Sql địa phương của tôi Server, như được đưa ra trong"thu nhập hoãn lại chuẩn bị không thể hoàn tất" lỗi khi sử dụng cơ sở dữ liệu địa phương như máy chủ liên kết

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

Tuy nhiên khi tôi cố gắng thực hiện một lưu trữ thủ tục trong Linked server, nó ném:

Deferred prepare could not be completed 

lỗi và không hợp lệ đối tượng tên 'tên bảng'

+0

Tôi chỉ cần chạy vào điều này và nó bật ra rằng tên bảng là trường hợp nhạy cảm trong openquery – gordy

Trả lời

10

bạn đã bỏ lỡ điều gì đó trong objec của bạn t tên. Cần phải luôn giống như Database.User.ObjectName (ví dụ: Northwind.dbo.Customers)

Đặt tên đối tượng hoàn chỉnh khi chạy truy vấn thông qua các máy chủ được liên kết.

Query cho Stored Procedure có thể như thế này khi thực hiện trên máy chủ Liên kết:

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

Kiểm tra với các tùy chọn như SET FMTONLY OFF khi thực hiện thủ tục lưu trữ.

theo liên kết này cho OPENQUERY: http://msdn.microsoft.com/en-us/library/ms188427.aspx

+0

Chỉ cần chạy vào này gần đây khi cố gắng để giúp đỡ người khác ra với một máy chủ được liên kết. Muốn thông báo lỗi mang tính mô tả hơn. –

1

tôi đã có lỗi tương tự cố gắng để truy vấn thông qua một máy chủ được liên kết. Tuy nhiên, tôi đã truy vấn một khung nhìn trên máy chủ đích, không phải là một thủ tục được lưu trữ.

xem server mục tiêu đã được tạo ra như thế này:

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

Để khắc phục vấn đề này, tôi đã làm một cái nhìn alter, và quấn hai báo cáo UNION trong một subquery, như thế này:

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

Phải là một số vấn đề siêu dữ liệu với chế độ xem gốc.

Hy vọng điều này sẽ giúp bạn!

1

Cùng một vấn đề với tôi: Tôi giải quyết nó chỉ sửa đối tượng "đích", không được đặt tên chính xác.

Trong trường hợp của tôi, tôi đã tìm kiếm [testDb].[Business.Customer] bảng, nhưng tên chính xác là [testDb].[Business].[Customer] ... cùng một lỗi như của bạn:

cung cấp Il OLE DB "SQLNCLI10" mỗi máy chủ il collegato "RIBOWEB10 \ SQLEXPRESS "ha restituito il messaggio" hoãn chuẩn bị không thể hoàn thành. "

Tôi nghĩ SQL Server cố gắng tự động giải quyết các tên không khớp trực tiếp với các đối tượng thực, nhưng không chắc chắn về điều đó.

Khá dễ dàng, tôi hy vọng điều này sẽ giúp :)

1

Thậm chí nếu bạn đã đặt tên một cột không đúng trong truy vấn của bạn, bạn sẽ thấy lỗi này.Ví dụ:

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

và tên cột là column, không colunm.

Dòng dưới cùng là kiểm tra truy vấn thực tế được gửi đến máy chủ từ xa để chính xác trước, sau đó quấn nó trong openquery và kiểm tra lại.

Các vấn đề liên quan