2011-08-04 74 views
7

Tôi cần truy vấn hai bảng trong hai cơ sở dữ liệu khác nhau trên cùng một SQL Server. Trên một bảng, tôi cần phải có được tất cả các hàng (đơn giản chọn) và mặt khác, một lựa chọn nhưng nơi id phù hợp với một tham số trong proc được lưu trữ của tôi.Truy vấn hai bảng trong cơ sở dữ liệu riêng biệt trên cùng một máy chủ

tôi đã cố gắng làm điều này nhưng nhận được lỗi

Từ định đa phần không thể bị ràng buộc.

Tôi làm cách nào để thực hiện việc này?

QUERY:

SELECT QUALITY_CENTER, POSTCODE_ID, (SELECT [QCID] 
    FROM [Website_Interactive].[dbo].[IIPCentre_UserObject] 
    WHere LoginID = @loginID) 
    FROM IIP_QC_LIST 
+0

tiền của tôi sẽ được trên thiếu phần giản đồ của đối tượng đủ điều kiện tên, ví dụ: MyDB.dbo.MyTable. –

+0

Chỉ cần rõ ràng, bạn đã không để lại bất cứ điều gì từ truy vấn bạn đăng chính xác? Bởi vì nếu bạn cố gắng thực hiện một 'ORDER BY' hoặc một cái gì đó bằng cách sử dụng QCID bên ngoài truy vấn phụ, bạn sẽ nhận được lỗi đó. –

Trả lời

13

Âm thanh như bạn gõ sai điều gì đó. Bạn có thể truy vấn một bảng trong một DB khác bằng cách sử dụng phương pháp sau:

SELECT tn.ID, tn.NAME 
FROM [Database Name].[Schema].[TableName] as tn 

Tôi cố ý thêm tên cơ sở dữ liệu hai từ vì bạn phải đặt dấu ngoặc vuông xung quanh để nó được nhận diện. Lược đồ của bạn rất có thể là dbo.

Nếu bạn chỉ cho chúng tôi truy vấn của bạn và cung cấp cho chúng tôi tên DB, tôi có thể cung cấp câu trả lời hoàn chỉnh hơn.

UPDATE:

Bạn có chắc bạn đang đánh vần "Trung tâm" một cách chính xác? Tôi nhận thấy bạn đã đánh vần nó là "trung tâm" trong IIPCentre_UserObject mà tôi nghĩ có thể phù hợp với Vương quốc Anh (?) Nhưng bạn đã viết "trung tâm" cho QUALITY_CENTER. Tôi cho rằng nó được viết theo cách này hay cách khác trong môi trường của bạn.

+0

Có thể thêm thông tin xác thực người dùng vào truy vấn này nếu người dùng hiện tại không có quyền truy cập vào bảng này không? –

1

Có thể/đơn giản để chọn từ các cơ sở dữ liệu khác nhau trên cùng một máy chủ. Bạn cần phải sử dụng tên đầy đủ tức là

SELECT * from database.schema.table 

Ví dụ

SELECT * FROM northwind.dbo.orders where id = @id 
+0

Điều gì có thể vẫn có thể cực kỳ tốn kém. Có một chi phí bổ sung liên quan khi tham gia hai bảng từ cơ sở dữ liệu khác nhau nhưng vẫn còn trên cùng một máy chủ cơ sở dữ liệu? Liệu cơ sở dữ liệu cung cấp các thuật toán để làm điều đó nhiều hơn hoặc ít hiệu quả hơn nếu các máy chủ khác nhau được tham gia (không có chi phí mạng giả định)? Câu trả lời cho đến nay là một chút ngắn cho một 10k + magician 8- ( –

+0

@PatrickFromberg Xin lỗi để thất vọng, mặc dù thông tin bạn đang hy vọng là cách bên ngoài phạm vi của câu hỏi ban đầu (trước khi chỉnh sửa sau khi trả lời). Câu trả lời ngắn gọn, trong MS SQL Server, việc nối giữa hai bảng trong các cơ sở dữ liệu khác nhau trên cùng một máy chủ tương đương với hai bảng trong cùng một cơ sở dữ liệu. để tối ưu hóa tốt nhất có thể nhưng chắc chắn yêu cầu gửi lượng lớn dữ liệu có thể trên mạng để thực hiện kết nối. –

5

Bạn có thể dễ dàng làm điều đó bằng cách cung cấp FQN (Fully Qualified Name) cho các đối tượng SQL (trong trường hợp này bảng SQL của bạn). Cú pháp FQN cho một bảng là như vậy:

[database-name].[schema-name].[table-name] 

Ví dụ:

SELECT a, b, c FROM Database1.Schema1.Table1 
UNION 
SELECT a, b, c FROM Database2.Schema2.Table2 

đâu Database1 là cơ sở dữ liệu đầu tiên của bạn và Database2 là thứ hai của bạn.

0

Bạn có thể truy vấn hai cơ sở dữ liệu riêng biệt nếu các bảng từ 1 cơ sở dữ liệu là giá trị cùng với một bảng

như thế này:

SELECT * FROM DB1.dbo.MyTable db1,DB2.dbo.MyTable db2 where db1.table1=db2.table1 
Các vấn đề liên quan