دسته بندی مقالات
- بیشتر -محصولات
- بیشتر -آخرین مقالات
- بیشتر --
دستور synonym در Sql Server
1404/06/30 -
کنترل printDialog در سی شارپ
1404/06/29 -
تابعها (FUNCTION) در SQL Server
1404/06/28 -
کنترل pictureBox در سی شارپ
1404/06/27 -
System Tables در Sql Server
1404/06/26 -
کنترل panel در سی شارپ
1404/06/25
دستور synonym در Sql Server

دستور Synonym در SQL Server
در SQL Server علاوه بر اشیاء اصلی مثل جدول (Table)، نما (View)، تابع (Function) و رویهٔ ذخیرهشده (Stored Procedure)، قابلیتی به نام Synonym وجود دارد.
Synonym در لغت به معنی «مترادف» است؛ در SQL Server نیز نقش مشابهی دارد.
میتوانید برای یک شیء پایگاه داده، یک نام دیگر تعریف کنید و بهجای نام اصلی از آن نام جایگزین استفاده نمایید.
Synonym نوعی شیء پایگاه داده است که به یک شیء دیگر در همان پایگاه داده یا حتی در پایگاه دادهای دیگر (و در صورت پیکربندی Linked Server، روی سروری دیگر) اشاره میکند.
به زبان ساده: Synonym یک آدرس جایگزین برای دسترسی به آبجکتهای SQL Server است.
مثال ساده
فرض کنید جدولی با نام طولانی دارید:
[SalesDB].[dbo].[CustomerTransactions_2025]
برای دسترسی به این جدول هر بار باید کل نام را بنویسید. حالا اگر Synonym بسازید:
CREATE SYNONYM dbo.CustomerTrans FOR [SalesDB].[dbo].[CustomerTransactions_2025];
از این پس کافی است در کوئریها بنویسید:
SELECT * FROM dbo.CustomerTrans;
که بسیار سادهتر است.
مزایای استفاده از Synonym در sql
-
سادگی در نوشتن کوئریها
نامهای طولانی و پیچیده را به نامهای کوتاه و خوانا تبدیل میکند. -
لایهٔ انتزاعی (Abstraction Layer)
اگر ساختار پایگاه داده یا نام شیء تغییر کند، کافی است Synonym را اصلاح کنید، نه کل کوئریها و کدها. -
دسترسی به اشیاء بین دیتابیسها و سرورها
میتوانید با Synonym به جداول یا نماهای یک دیتابیس دیگر یا حتی سرور دیگر (از طریق Linked Server) دسترسی داشته باشید. -
جایگزین مناسب برای View در برخی موارد
اگر فقط میخواهید آدرس یک شیء دیگر را ساده کنید (بدون منطق اضافه)، Synonym کافی است.
محدودیتهای Synonym در sql
- Synonym فقط به اشیاء زیر اشاره میکند: Table، View، Function، Stored Procedure.
- Synonym امنیت مستقل ندارد؛ دسترسی کاربر به Synonym وابسته به دسترسی او به شیء اصلی است.
- نمیتوانید روی Synonym ایندکس یا Constraint بسازید.
- Synonym قابل انتقال خودکار بین دیتابیسها نیست (باید مجدد ایجاد شود).
ساختار نامگذاری اشیاء
نام کامل یک شیء در SQL Server معمولاً به صورت چهار بخشی است:
[ServerName].[DatabaseName].[SchemaName].[ObjectName]
مثال:
[ServerX].[SalesDB].[dbo].[Customers]
Synonym میتواند به چنین شیئی اشاره کند و آن را با یک نام سادهتر در اختیار شما بگذارد.
ایجاد Synonym (CREATE SYNONYM)
-
سینتکس
CREATE SYNONYM [schema_name.]synonym_name
FOR <server.database.schema.object>;
- schema_name: شِمایی که Synonym در آن ایجاد میشود (اغلب dbo).
- synonym_name: نام جدید (مترادف).
- بخش FOR باید به شیء مقصد اشاره کند.
مثالهای کاربردی از دستور synonym
-
Synonym برای جدول در همان دیتابیس
CREATE SYNONYM dbo.Emp FOR dbo.Employees;
حالا بهجای:
SELECT * FROM dbo.Employees;
مینویسیم:
SELECT * FROM dbo.Emp;
-
Synonym برای جدول در دیتابیس دیگر
CREATE SYNONYM dbo.Cust FOR SalesDB.dbo.Customers;
از این پس:
SELECT * FROM dbo.Cust;
به جدول [SalesDB].[dbo].[Customers] اشاره میکند.
-
Synonym برای View
CREATE SYNONYM dbo.ActiveCust FOR SalesDB.dbo.vw_ActiveCustomers;
حالا:
SELECT * FROM dbo.ActiveCust;
-
Synonym برای Stored Procedure
CREATE SYNONYM dbo.usp_AddOrder FOR SalesDB.dbo.usp_InsertNewOrder;
و بعد:
EXEC dbo.usp_AddOrder @CustId=5, @Amount=2000;
-
Synonym برای تابع اسکالر
CREATE SYNONYM dbo.fn_CalcAge FOR HRDB.dbo.fn_GetAge;
استفاده:
SELECT dbo.fn_CalcAge(BirthDate) FROM dbo.People;
Synonym روی سرور دیگر (Linked Server)
اگر Linked Server تعریف کرده باشید (مثلاً ServerX):
CREATE SYNONYM dbo.RemoteOrders
FOR ServerX.SalesDB.dbo.Orders;
حالا بدون نیاز به نوشتن نام کامل چهار بخشی، میتوانید ساده بنویسید:
SELECT * FROM dbo.RemoteOrders;
🌟 آیا میخواهید به یک متخصص پایگاه داده تبدیل شوید و در دنیای فناوری اطلاعات بدرخشید؟
با دوره آموزشی SQL Server ما، شما میتوانید به راحتی و با روشی عملی، تمام مهارتهای لازم را یاد بگیرید!
این دوره به شما آموزش میدهد که چگونه دادهها را به بهترین شکل مدیریت کنید، گزارشهای قدرتمند بسازید و به تحلیلهای عمیق دست یابید.
با محتوای جذاب و پروژههای واقعی، شما نه تنها تئوری را یاد میگیرید، بلکه تواناییهای عملی خود را نیز تقویت میکنید.
پس فرصت را از دست ندهید! همین امروز به جمع یادگیرندگان ما بپیوندید و اولین قدم را به سوی آینده شغلی روشنتر بردارید!
⇐همین حالا شروع کنید و به دنیای دادهها بپیوندید!
مشاهده Synonymها
برای دیدن لیست Synonymهای موجود:
SELECT name, base_object_name
FROM sys.synonyms;
یا در SSMS از بخش Synonyms در هر دیتابیس.
حذف Synonym (DROP SYNONYM)
-
سینتکس
DROP SYNONYM [schema_name.]synonym_name;
مثالها
DROP SYNONYM dbo.Emp;
یا:
DROP SYNONYM dbo.Cust;
-
حذف امن (SQL Server 2016+)
DROP SYNONYM IF EXISTS dbo.Emp;
این روش باعث میشود اگر Synonym وجود نداشت، خطا ندهد.
تغییر دستور Synonym
دستوری به نام ALTER SYNONYM وجود ندارد.
برای تغییر مقصد باید ابتدا Synonym را حذف کنید و دوباره بسازید:
DROP SYNONYM dbo.Cust;
GO
CREATE SYNONYM dbo.Cust FOR SalesDB2025.dbo.Customers;
نکات امنیتی دستور synonym
- کاربری که Synonym را فراخوانی میکند باید مجوز دسترسی به شیء اصلی را داشته باشد.
- اگر دسترسی کاربر روی Synonym داده شود ولی روی شیء مقصد نداشته باشد، باز هم خطای Permission خواهد گرفت.
- میتوان با نقشها (Roles) مدیریت کرد تا کاربران فقط از Synonym استفاده کنند و نام واقعی جداول پنهان بماند.
کاربرد دستور synonym در Sql
-
انتقال دیتابیس
اگر نام دیتابیس مقصد تغییر کند، کافی است Synonym اصلاح شود نه کل کوئریها. -
دیتابیسهای متعدد
وقتی جداول مشابه در دیتابیسهای مختلف دارید (مثلاً Customer در SalesDB و در ArchiveDB)، میتوانید با Synonym یک نام یکتا به هرکدام بدهید. -
کدنویسی تمیز
نامهای کوتاه و ساده در کوئریها. -
جداسازی لایهها
در برنامهها Synonym بهعنوان واسط استفاده میشود؛ تغییر ساختار پایگاه داده بدون تغییر کد برنامه.
محدودیتهای عملیاتی
- Synonym را نمیتوان در عملیات replication استفاده کرد.
- نمیتوان Synonym را داخل Synonym دیگری قرار داد (مترادف روی مترادف مجاز نیست).
- امکان ساخت Synonym موقت در TempDB وجود ندارد (Synonym همیشه دائمی در دیتابیس است تا زمانی که حذف شود).
بهترین روشها (Best Practices)
- همیشه Synonym را با Schema مشخص کنید (معمولاً dbo).
- نام Synonym را واضح انتخاب کنید؛ بهعنوان مثال همان نام اصلی را با اختصار یا نام سادهتر.
- در پروژههای بزرگ، لیستی از Synonymها و مقصدشان نگهداری کنید تا بعداً گیجکننده نشود.
- اگر قرار است زیاد تغییر کنند، اسکریپتهای DROP IF EXISTS + CREATE داشته باشید.
اسکریپت نمونهٔ ایجاد و حذف
-- ایجاد
CREATE SYNONYM dbo.OrdersToday FOR SalesDB.dbo.Orders;
-- استفاده
SELECT * FROM dbo.OrdersToday WHERE OrderDate = CAST(GETDATE() AS DATE);
-- حذف
DROP SYNONYM IF EXISTS dbo.OrdersToday;
📌جمعبندی
Synonym در SQL Server ابزار قدرتمندی برای سادهسازی دسترسی به اشیاء و ایجاد لایه انتزاعی است.
با دستور CREATE SYNONYM ایجاد میشود.
با DROP SYNONYM یا DROP SYNONYM IF EXISTS حذف میشود.
میتواند به Table، View، Function یا Stored Procedure اشاره کند، حتی در دیتابیس یا سرور دیگر.
هیچ منطق اضافهای ندارد، فقط نام جایگزین است.
با استفاده درست از Synonym کدنویسی شما سادهتر، قابلنگهداریتر و مقاومتر در برابر تغییرات ساختاری دیتابیس خواهد شد.
دوره های مرتبط

آموزش پایگاه داده SqlServer
پایگاه داده Sqlserver یکی از پایگاه داده های مهم برای ذخیره اطلاعات محسوب میشود .