خوش آموز درخت تو گر بار دانش بگیرد، به زیر آوری چرخ نیلوفری را


نحوه Join کردن جداول دیتابیس ها و SQL Server های مختلف

نحوه Join کردن جداول دیتابیس ها و SQL Server های مختلف
در پست قبلی نحوه Join کردن جداول از دیتابیس های مختلف در یک SQL Server را آموزش دادیم که کاری ساده بود و در این پست کوتاه تصمیم داریم نحوه Join کردن جداول از دیتابیس های مختلف و همچنین در سرورهای جدا را بررسی کنیم. برای این مهم اول باید SQL Server ها را به هم لینک دهید و سپس باید در کوئری خود نام Server های SQL را هم قید کنید.

نرم افزار سامانه مودیان راهکار
سرعت اجرای کوئری به قدرت سخت افزاری سرورها، حجم دیتابیس هاف نوع اطلاعاتی که قرار است Select کنید و همچنین حجم اطلاعاتی که قرار است Select شوند و همچنین لینک های ارتباطی بین سرورها بستگی خواهد داشت. ضمنا قبل از ادامه کار، حتما ارتباط شبکه ای بین این دو سرور باید برقرار باشد و حتما پورت های SQL در فایروال های سر راه باید باز باشند. با رعایت این موارد، کار را ادامه می دهیم. شما برای ارتباط دادن دو instance مختلف از SQL ای که در یک سرور هم نصب شده باشند، از همین رویه می توانید استفاده که در این مثال، به همین صورت خواهد بود.


مرحله اول لینک دادن سرورهای SQL (یا instance) با استفاده از stored procedure های سیستمی sp_addlinkedserver و sp_addlinkedsrvlogin است. stored procedure سیستمی sp_addlinkedserver برای لینک دادن سرورهای ریموت استفاده می شود و sp_addlinkedsrvlogin برای پیکربندی سرور ریموت مرتبط برای استفاده از اعتبار سنجی و لاگین لوکال مورد استفاده قرار می گیرد. شما برای لاگین به یک SQL Server حتما نیاز به اعتبارسنجی دارد و پس از Authenticate شدن می توانید بدان لاگین کنید. در اینجا هم این مورد صدق می کند و باید اعتبارسنجی انجام شده و سپس ارتباط شکل بگیرید.

sp_addlinkedserver @Server, @SrvProduct;

sp_addlinkedsrvlogin @RemoteServerName, @LocalLogin, @UseSelf;

به عنوان مثال instance دوم SQL که نصب کرده ایم، با نام MACWINDOWS\MSSQLSERVER2 می باشد و instance پیشفرض هم که MACWINDOWS می باشد. خب، حالا باید این دو instakce یا این دو SQL Server را به هم لینک دهیم. کوئری فوق را اصلاح کرده و به صورت زیر وارد می کنیم:

USE [master]
GO
EXEC master.dbo.sp_addlinkedserver @server = N'MACWINDOWS\MSSQLSERVER2', @srvproduct=N'SQL Server' ;
GO

EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'MACWINDOWS\MSSQLSERVER2', @locallogin = NULL , @useself = N'True' ;
GO

این instance های SQL می توانند روی یک سرور و یا در سرورهای جدای از هم باشند. در هر صورت روش کار به همین صورت می باشد. در اینجا پسوردی برای لاگین در نظر گرفته نشده ولی اگر User و Pass دارید، از دستور زیر برای لینک دادن به سرور دوم استفاده کنید:

exec sp_addlinkedsrvlogin
@rmtsrvname='ServerName'
, @useself=false
, @rmtuser='user'
, @rmtpassword='Password';

خب، حالا که لینک بین سرورها برقرار شد، شما می توانید از T-SQL برای Join کردن جداول مورد نظرتان در دیتابیس های مورد نظرتان استفاده کنید که نمونه ای از آن را در ذیل مشاهده می کنید:

SELECT
t1.SlNo,
t2.FirstName,
t2.LastName
FROM
[MACWINDOWS\MSSQLSERVER2].[MtbDbTwo].[dbo].[TableTwo] as t2
INNER JOIN [MtbDbOne].[dbo].[TableOne] as t1 on t1.SlNo = t2.SlNo;
GO

حتما نام سرور یا همان Instance را قبل از نام دیتابیس در کوئری باید قبد کنید. خروجی کوئری فوق را هم در ذیل مشاهده می کنید:

نحوه Join کردن جداول دیتابیس ها و SQL Server های مختلف . آموزشگاه رایگان خوش آموز

کوئری فوق در SQL Server 2014 مورد تست قرار گرفته شده است.


نمایش دیدگاه ها (0 دیدگاه)

دیدگاه خود را ثبت کنید:

انتخاب تصویر ویرایش حذف
توجه! حداکثر حجم مجاز برای تصویر 500 کیلوبایت می باشد.


دسته بندی مطالب خوش آموز