Wednesday, June 1, 2011

SQL Server: การ join ข้าม database

เวลาคุณจะ join ตารางที่อยู่คนละ database หรือจะเพิ่มข้อมูลใน database หนึ่ง โดยการ select มาจากอีก database หนึ่ง ไม่ใช่ว่าอยู่ดีๆคุณก็จะทำได้ รายชื่อ table ที่คุณสามารถ join กัน หรือ select ร่วมกันได้จะอยู่ใน sys.servers ลอง

select * from sys.servers

ถ้ามีชื่อ server ที่คุณจะ join อยู่ในนี้ก็แสดงว่า join ได้ คำสั่งในการ join ก็เช่น

SELECT TOP 20 * FROM [MyServer1].[DBTest].[dbo].[Product] a 
INNER JOIN [MyServer2].[DBReal].[dbo].[Products] b ON a.code = b.code

การที่จะทำให้ MyServer1 กับ MyServer2 join กันได้ตามคำสั่งด้านบน คุณต้องเพิ่มชื่อ server ใน sys.servers เสียก่อน ถ้าคุณ log in ใช้ MyServer1 อยู่ ก็ run คำสั่งต่อไปนี้

EXEC sp_addlinkedserver @server='MyServer2' 

แล้วก็ต้องเพิ่ม user ที่ใช้ในการ log in เข้า MyServer2 ด้วย

EXEC master.dbo.sp_addlinkedsrvlogin  @rmtsrvname=N'MyServer2',  
@useself=N'False',
@locallogin=NULL,
@rmtuser=N'mydbuser',
@rmtpassword='mypassword'
GO

แค่นี้ก็เรียบร้อย