Sử dụng máy chủ được liên kết với OPENQUERY trong dự án cơ sở dữ liệu


10

Tôi có SQL Server 2008 đang chạy cơ sở dữ liệu mà tôi muốn ném vào TFS. Do đó, tôi đã sử dụng một dự án cơ sở dữ liệu Visual Studio 2013 nơi tôi đã nhập DB. Sau khi sửa một loạt lỗi, tôi bị kẹt chỉ còn một lỗi:

Trong một chế độ xem, các nhà phát triển được sử dụng OPENQUERYđể truy cập vào một máy chủ được liên kết. Vì vậy, tôi đã nhập một DACPAC chứa cơ sở dữ liệu phù hợp và thêm nó vào dự án bằng cách Add Database Referencesử dụng các tùy chọn tham chiếu sau.

Cài đặt cho cơ sở dữ liệu tham khảo

Phiên bản Script ban đầu

Đây là phiên bản ngắn hơn của việc tạo chế độ xem ban đầu:

CREATE VIEW dbo.vwStatus
AS
SELECT     StatusID, StatusName
FROM       OPENQUERY(LinkedServer, 'SELECT * FROM [DB].[dbo].tbStatus') AS derivedtbl_1

Điều này dẫn đến lỗi sau:

Lỗi 136 SQL71501: Xem: [dbo]. [VwStatus] có một tham chiếu chưa được giải quyết đến đối tượng [LinkedServer].

Lần thử đầu tiên

Vì vậy, tôi đã cố gắng chèn biến tên máy chủ

FROM       OPENQUERY($(LinkedServer), 'SELECT * FROM [DB].[dbo].tbStatus') AS derivedtbl_1

Điều đó dẫn đến

Lỗi 176 SQL46010: Cú pháp không chính xác gần $ (LinkedServer).

Nỗ lực hơn nữa

Tôi loay hoay một chút và thử các cách sau (có và không có trích dẫn định danh được bật):

FROM       OPENQUERY("$(LinkedServer)", 'SELECT * FROM [DB].[dbo].tbStatus') AS 
FROM       OPENQUERY([$(LinkedServer)], 'SELECT * FROM [DB].[dbo].tbStatus') AS 
FROM       OPENQUERY([LinkedServer], 'SELECT * FROM [DB].[dbo].tbStatus') AS 
FROM       OPENQUERY("LinkedServer", 'SELECT * FROM [DB].[dbo].tbStatus') AS 

Tôi luôn luôn nhận được một lỗi.

Tôi không biết tôi đang nhìn gì ở đây. Phải không Cảm ơn vì đã dành thời gian cho tôi!

(Đáng buồn là tôi không thể thêm thẻ visual-studio-2013, vì vậy tôi đã sử dụng visual-studio)

Câu trả lời:


9

Tôi đã quản lý để làm cho nó hoạt động:

Tôi đã tạo một dự án cơ sở dữ liệu mới master. Trong đó tôi đã tạo một thư mục Server Objectvà một tập tin LinkedServer.sql. Trong tệp SQL tôi đã thêm máy chủ được liên kết:

GO
EXECUTE sp_addlinkedserver @server = N'LinkedServer', @srvproduct = N'sqlserver', @provider = N'SQLNCLI', @datasrc = N'LinkedServer.domain';

Sau khi thêm dự án cơ sở dữ liệu mastervào giải pháp của tôi và tham chiếu nó trong dự án cơ sở dữ liệu ban đầu của tôi, tôi đã có thể xây dựng dự án bằng cú pháp ban đầu;

CREATE VIEW dbo.vwStatus
AS
SELECT     StatusID, StatusName
FROM       OPENQUERY(LinkedServer, 'SELECT * FROM [DB].[dbo].tbStatus') AS derivedtbl_1

Tôi vẫn không thể làm việc này mặc dù có một dự án tổng thể với tệp LinkedServers.sql ở đó
kiểm tra

Chà, thật khó để giúp đỡ nếu không có thêm thông tin. có lẽ tốt hơn để làm một câu hỏi khác. Điều quan trọng là tham chiếu dự án tổng thể của bạn trong giải pháp của bạn. nếu không thì điều này làm việc cho tôi chính xác như mô tả.
Chake

Trong giải pháp của bạn - bạn có một dacpac (s) hoặc dự án với các DBA LinkedServer không?
Martin Meeser

Xin chào, tôi không thể nhớ, nhưng tôi đã viết trong đoạn thứ hai, rằng tôi đã sử dụng dacpacs. Nhưng đối với giải pháp cuối cùng, tôi đã tham chiếu một dự án cơ sở dữ liệu cho DB chính.
Chake

1
Lưu ý rằng bạn phải đảm bảo tệp 'LinkedServer.sql' của mình có hành động xây dựng được đặt thành 'Xây dựng'. Khó chịu VS dường như không nhận ra máy chủ được liên kết từ tập lệnh Triển khai trước, hoặc tất cả điều này sẽ không cần thiết.
Taran
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.