2009-07-24 40 views
11

Tôi hiện đang chạy một bộ phần mềm của bên thứ ba, sử dụng SQL Server làm cơ sở dữ liệu của nó. Tôi có một trường hợp thứ hai của SQL Server chạy ở một vị trí khác, và một số ứng dụng mà tôi đang xây dựng trong trường hợp đó SQL Server cần truy cập một số dữ liệu trong phần mềm của bên thứ ba. Vì vậy, tôi tạo ra một kết nối ODBC giữa các hộp, và thiết lập máy chủ SQL của bên thứ ba như một máy chủ được liên kết trên phiên bản SQL Server của tôi. Là một bài kiểm tra, tôi chạy một cái gì đó giống như tuyên bố sau từ máy chủ SQL của tôi, truy cập vào một trong các bảng bên thứ ba của:Cơ sở dữ liệu SQL Server được liên kết cung cấp lỗi "siêu dữ liệu không nhất quán"

SELECT * FROM LinkedServerName.SchemaName.dbo.TableName 

Để mà tôi nhận được lỗi này:

OLE DB error trace [Non-interface error: Column 'TableRowVersion' (compile-time 
ordinal 4) of object '"SchemaName"."dbo"."TableName"' was reported to have a 
DBCOLUMNFLAGS_ISROWVER of 0 at compile time and 512 at run time]. 

Msg 7356, Level 16, State 1, Line 1 

OLE DB provider 'MSDASQL' supplied inconsistent metadata for a column. Metadata 
information was changed at execution time. 

Lỗi này là tương tự cho bất kỳ bảng nào khác mà tôi cố gắng truy cập. Lỗi này có ý nghĩa gì và có cách nào xung quanh nó không?

Trả lời

27

Tôi đã thực hiện điều này một vài lần. Cách giải quyết mà tôi tìm thấy là sử dụng OPENQUERY.

SELECT * FROM OPENQUERY(LinkedServerName, 'SELECT * FROM DBName.Schema.Table') 

Ngoài ra, lựa chọn bạn đã đăng ở trên có tên không đúng 4 phần (có thể là lỗi đánh máy nhưng tôi không chắc chắn). Nó phải là LinkedServerName.DBName.SchemaName.TableName

7
Server: Msg 7356, Level 16, State 1, Line 1 

OLE DB provider 'MSDASQL' supplied inconsistent metadata for a column. 
Metadata information was changed at execution time. 

Nếu bạn sử dụng cú pháp bốn phần để truy vấn dữ liệu từ cơ sở dữ liệu máy chủ được liên kết, bạn có thể nhận được thông báo lỗi này. Để khắc phục sự cố này, bạn có thể sử dụng cú pháp OPENQUERY để truy vấn dữ liệu từ cơ sở dữ liệu máy chủ được liên kết. Bạn có thể bật cờ theo dõi 7300 để nhận thêm thông tin chi tiết về thông báo lỗi này. Để bật cờ theo dõi 7300, hãy chạy câu lệnh Transact-SQL sau đây:

DBCC TRACEON(7300) 
2

tôi giải quyết này với điều này bước

1) Bước 1:

• Trong SQL Server Management Studio mở máy chủ được liên kết và sau đó 'liên kết máy chủ mới'.

• Bên trong trình hướng dẫn xuất hiện - Chọn tab Chung.

• Chỉ định tên bí danh trong trường "Máy chủ được liên kết".

• Chọn SQL Native Client làm nhà cung cấp.

• Thêm sql_server vào trường "Tên sản phẩm" (đó là phép thuật).

• Trong "Nguồn dữ liệu" - chỉ định tên của máy chủ được sử dụng làm máy chủ được liên kết.

2) Bước 2:

• Trong tab Security - định các tùy chọn bảo mật thích hợp (ví dụ như bối cảnh an ninh)

3) Bước 3:

• Trong tab Server Options - đặt "Truy cập dữ liệu", RPC, "Rpc Out" và "Use Remote Collaboration" thành true.

4) Bước 4:

• Thưởng thức.

http://alexpinsker.blogspot.com.br/2007/08/how-to-give-alias-to-sql-linked-server.html

+0

Kể từ khi câu hỏi là về một kết nối đến một máy chủ MS SQL và một số người khác không DBMS (mySQL, PostgreSQL, ...) câu trả lời này là một trong những giá trị nhất đối với trường hợp này (có nguồn gốc là cách performant hơn hơn ODBC). Nhưng nó sẽ không hoạt động nếu máy chủ thứ 2 của bạn không phải là máy chủ MS SQL – DestyNova

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