برخی مواقع شما نیاز دارید تا یک Query را بر روی یک سرور اجرا نمایید و این Query برخی اطلاعات خود را از سرور دیگری دریافت مینماید. در این صورت باید یک پل ارتباطی بین سرور جاری و سرور دیگر وجود داشته باشد تا بتوانید در یک Query به سرور دیگری متصل شوید و اطلاعاتی را دریافت نمایید. در حالت عادی یک Query فقط میتواند بر روی سرور جاری اجرا شده و اطلاعاتی را بازیابی نماید. اما اگر همین Query بخواهد به سرور دیگری متصل شود، آن سرور باید در سرور جاری بصورت Linked Server تعریف شده باشد.
به عنوان مثال:
من سروری با آدرس 192.168.0.1 دارم که دارای پایگاه دادهای با نام Salary می باشد. نام این سرور را A میگذارم.
همچنین من سرور دیگری با آدرس 192.168.1.100 دارم که دارای پایگاه داده ای با نام Accounting است. نام این سرور را B میگذارم.
حالا میخواهم در سرور A یک Query بنویسم که جدول Payment را با اتصال به سرور B به جدول Document متصل نموده و نتیجه ی JOIN این دو جدول را نمایش دهد. به عنوان مثال:
SELECT * FROM Payment AS pay JOIN Document AS doc
ON pay.DocumentId = doc.Id
این
Query به هیچ عنوان اجرا نخواهد شد. زیرا نمیتواند جدول
Document را پیدا کند. برای این منظور باید سرور
B را به سرور
A معرفی کنیم که این کار از طریق
Linked Server انجام خواهد شد.
نحوهی ایجاد یک Linked Server
بر روی سیستم من دو نسخه از SQL نصب شده است. یکی Standard Edition و دیگری Express Edition. من میخواهم در نسخه Standard یک Linked Server به نسخهی Express ایجاد کنم. بنابراین با اتصال به نسخه Standard مراحل زیر را طی میکنم:
1. یک New query ایجاد میکنم.
2. دستورات زیر را در Query ایجاد شده مینویسم:
sp_addlinkedserver 'MyServer', '', 'SQLNCLI', '.\sqlexpress'
توضیحات:
sp_addlinkedserver نام رویه ای است که یک Linked Server را ایجاد مینماید.
پارامتر اول نام Linked Server را مشخص مینماید که جهت دسترسی به سرور دیگر مورد استفاده قرار میگیرد.
پارامتر دوم Product Name میباشد که من خالی گذاشتم.
پارامتر سوم Provider Name یا نام فراهم کننده دادهای است. چون من میخواهم به یک سرور SQL متصل شوم SQLNCLI (SQL Native Client) را انتخاب کردم. اگر به منبع دادهای دیگری مثل Access،Oracle، MySql و ... متصل میشوید باید Provider Name دیگری را نتخاب کنید.
پارامتر چهارم نام یا IP سروری است که میخواهیم به آن لینک شویم.
3. با فشردن F5 یا منوی Execute این Query را اجرا کنید.
با اجرای موفقیت آمیز مراحل فوق باید عنوان MyServer را در مسیر Server Objects > Linked Server مشاهده کنید. در نسخه Express پایگاه دادهای با نام test دارم که شامل جدولی به نام tbl می باشد. با نوشتن Query زیر میتوانم محتویات این جدول را مشاهده کنم:
SELECT * FROM MyServer.test.dbo.tbl
ممکن است جهت اتصال به سرور لینک شده نیاز به نام کاربری و رمز عبور داشته باشید. جهت تعریف نام کاربری و رمز عبور برای سرور لینک شده از دستورات زیر استفاده کنید:
sp_addlinkedsrvlogin 'MyServer',@rmtuser='user1', @rmtpassword='abc123'
توضیحات:
sp_addlinkedsrvlogin نام رویه ای است که نام کاربری و رمز عبور را به یک Linked Server اضافه میکند.
پارامتر اول نام Linked Server می باشد.
پارامتر دوم نام کاربری جهت اتصال به سرور لینک شده میباشد.
پارامتر سوم رمز عبور جهت اتصال به سرور لینک شده میباشد.