آموزش جامع تابع DB_NAME در SQL Server؛ Syntax، خروجی و ۱۰ مثال کاربردی

آموزش جامع تابع DB_NAME در SQL Server

توسط admin | گروه SQL Server | 1405/05/03

نظرات 0

آموزش جامع تابع DB_NAME در SQL Server با ۱۰ مثال عملی

عیب‌یابی SQL Server معمولاً از یک پرسش ساده آغاز می‌شود: این شناسه، تنظیم یا شمارنده دقیقاً به کدام جزء موتور اشاره دارد؟ در این مقاله، DB_NAME از سطح مقدماتی تا سناریوهای حرفه‌ای بررسی می‌شود و هر مثال با خروجی نمونه ارائه شده است.

در گزارش‌های چندپایگاه‌داده‌ای، پیام‌های عیب‌یابی و خروجی DMVها با کمک این تابع شناسه عددی پایگاه داده به نامی قابل فهم تبدیل می‌شود. تمرکز آموزش بر این است که DB_NAME در چه Contextی اجرا شود، نتیجه آن چگونه تفسیر شود و چه زمانی باید از یک DMV یا کاتالوگ‌ویوی جایگزین کمک گرفت.

برای مشاهده جایگاه DB_NAME میان سایر توابع و شمارنده‌ها، راهنمای جامع توابع کمکی کارایی و Metadata در SQL Server را نیز مطالعه کنید.

تعریف و کاربرد اصلی DB_NAME

تابع DB_NAME شناسه پایگاه داده را به نام آن تبدیل می‌کند و بدون پارامتر نام پایگاه داده جاری را می‌دهد. این تعریف در ظاهر کوتاه است، اما استفاده درست از DB_NAME به درک مفاهیمی مانند database_id، current database و sys.databases وابسته است.

قاعده عملی DB_NAME: ابتدا ورودی و Context را معتبر کنید، سپس خروجی را با نوع داده و معنای واقعی آن تفسیر کنید.

Syntax تابع یا متغیر DB_NAME

SELECT DB_NAME ( [ database_id ] ) AS Result;

پارامترهای DB_NAME

پارامترتوضیح
database_idشناسه اختیاری پایگاه داده؛ در صورت حذف، پایگاه داده جاری مبنا است.

نوع خروجی و رفتار NULL در DB_NAME

nvarchar(128) یا NULL در صورت شناسه نامعتبر یا محدودیت مجوز مشاهده پایگاه داده. در کد تولیدی بهتر است نوع مقصد به‌صورت صریح تعیین شود؛ زیرا تبدیل ضمنی می‌تواند مقایسه، مرتب‌سازی یا ذخیره نتیجه DB_NAME را مبهم کند.

مفاهیم کلیدی مرتبط با DB_NAME

  • database_id در مبحث DB_NAME
  • current database در مبحث DB_NAME
  • sys.databases در مبحث DB_NAME
  • metadata visibility در مبحث DB_NAME
  • nvarchar
  • context
  • permissions در مبحث DB_NAME
نقشه مفهومی DB_NAME در SQL Serverنمودار فنی اختصاصی DB_NAME شامل database_id، current database، sys.databases، metadata visibility، nvarcharDB_NAMEdatabase_idcurrent databasesys.databasesmetadata visibilitynvarcharدر گزارش‌های چندپایگاه‌داده‌ای، پیام‌های عیب‌یابی و خروجی DMVها با کمک این تابع شناسه عددی

تصویر نخست، ارتباط DB_NAME را با مفاهیم اختصاصی database_id، current database، sys.databases و metadata visibility نشان می‌دهد؛ این روابط مبنای انتخاب ورودی و تفسیر خروجی هستند.

سناریوهای واقعی استفاده از DB_NAME

سناریوی 1 برای DB_NAME، «نمایش نام پایگاه جاری» است. در این حالت باید نتیجه همراه Context پایگاه داده، زمان نمونه‌برداری و در صورت نیاز شناسه نشست ثبت شود تا داده برای عیب‌یابی بعدی ارزش داشته باشد.

سناریوی 2 برای DB_NAME، «ترجمه database_id در گزارش‌ها» است. در این حالت باید نتیجه همراه Context پایگاه داده، زمان نمونه‌برداری و در صورت نیاز شناسه نشست ثبت شود تا داده برای عیب‌یابی بعدی ارزش داشته باشد.

سناریوی 3 برای DB_NAME، «ساخت هدر گزارش پشتیبان‌گیری» است. در این حالت باید نتیجه همراه Context پایگاه داده، زمان نمونه‌برداری و در صورت نیاز شناسه نشست ثبت شود تا داده برای عیب‌یابی بعدی ارزش داشته باشد.

سناریوی 4 برای DB_NAME، «ثبت Context اجرای Job» است. در این حالت باید نتیجه همراه Context پایگاه داده، زمان نمونه‌برداری و در صورت نیاز شناسه نشست ثبت شود تا داده برای عیب‌یابی بعدی ارزش داشته باشد.

مثال‌های عملی DB_NAME از ساده تا حرفه‌ای

مثال 1: نام پایگاه داده جاری

بدون پارامتر، Context فعلی را نمایش می‌دهیم. این سناریو به‌طور اختصاصی برای درک رفتار DB_NAME طراحی شده است.

SELECT DB_NAME() AS CurrentDatabaseName;
CurrentDatabaseName
a00b

این مقدار برای درج نام Database در گزارش اجرای Job مناسب است. هنگام استفاده سازمانی از DB_NAME، خروجی نمونه را با داده واقعی محیط خود تطبیق دهید.

مثال 2: تبدیل DB_ID به نام

شناسه جاری را دوباره به نام تبدیل می‌کنیم. این سناریو به‌طور اختصاصی برای درک رفتار DB_NAME طراحی شده است.

SELECT DB_ID() AS DatabaseId, DB_NAME(DB_ID()) AS DatabaseName;
DatabaseIdDatabaseName
7a00b

این دو تابع برای رفت‌وبرگشت نام و شناسه مکمل یکدیگرند. هنگام استفاده سازمانی از DB_NAME، خروجی نمونه را با داده واقعی محیط خود تطبیق دهید.

مثال 3: فهرست پایگاه‌ها همراه نام تابع

نتیجه DB_NAME را با sys.databases مقایسه می‌کنیم. این سناریو به‌طور اختصاصی برای درک رفتار DB_NAME طراحی شده است.

SELECT TOP (5)
               d.database_id,
               d.name AS CatalogName,
               DB_NAME(d.database_id) AS FunctionName
        FROM sys.databases AS d
        ORDER BY d.database_id;
database_idCatalogNameFunctionName
1mastermaster

برابری دو نام یک کنترل ساده برای Metadata است. هنگام استفاده سازمانی از DB_NAME، خروجی نمونه را با داده واقعی محیط خود تطبیق دهید.

مثال 4: مدیریت شناسه نامعتبر در آموزش DB_NAME

برای database_id نامعتبر پیام جایگزین می‌سازیم. این سناریو به‌طور اختصاصی برای درک رفتار DB_NAME طراحی شده است.

DECLARE @DatabaseId int = 999999;
        SELECT COALESCE(DB_NAME(@DatabaseId), N'پایگاه داده ناشناخته') AS SafeDatabaseName;
SafeDatabaseName
پایگاه داده ناشناخته

در گزارش‌های مانیتورینگ، NULL خام را بدون توضیح رها نکنید. هنگام استفاده سازمانی از DB_NAME، خروجی نمونه را با داده واقعی محیط خود تطبیق دهید.

جریان اجرا DB_NAME در SQL Serverنمودار فنی اختصاصی DB_NAME شامل database_id، current database، sys.databases، metadata visibility، nvarchardatabase_idمرحله 1current databaseمرحله 2DB_NAMEمرحله 3sys.databasesمرحله 4metadata visibilityمرحله 5ورودی تا خروجی DB_NAMEnvarcharcontextnvarchar(128) یا NULL در صورت شناسه نامعتبر یا محدودیت

تصویر دوم، جریان اجرای DB_NAME را از ورودی و اعتبارسنجی تا تولید خروجی نمایش می‌دهد و نشان می‌دهد که nvarchar در کدام مرحله باید کنترل شود.

ادامه مثال‌های پیشرفته DB_NAME

مثال 5: ثبت Context در جدول موقت

نام پایگاه جاری را همراه زمان نمونه‌برداری ذخیره می‌کنیم. در این مثال، هدف تنها اجرای Query نیست؛ بلکه نشان دادن یک تصمیم فنی صحیح پیرامون DB_NAME است.

CREATE TABLE #ExecutionContext
        (
            DatabaseName sysname,
            CapturedAt datetime2(0)
        );
        
        INSERT INTO #ExecutionContext(DatabaseName, CapturedAt)
        VALUES (DB_NAME(), SYSDATETIME());
        
        SELECT * FROM #ExecutionContext;
DatabaseNameCapturedAt
a00b2026-07-25 00:05:00

ثبت Context در گزارش‌های خودکار از اجرای اشتباه روی Database دیگر جلوگیری می‌کند. این نکته از تفسیر سطحی یا استفاده تکراری و بی‌هدف از DB_NAME جلوگیری می‌کند.

مثال 6: استفاده در پیام خطا

نام Database را در متن کنترل ایمنی قرار می‌دهیم. در این مثال، هدف تنها اجرای Query نیست؛ بلکه نشان دادن یک تصمیم فنی صحیح پیرامون DB_NAME است.

DECLARE @Message nvarchar(4000) =
            CONCAT(N'عملیات در پایگاه داده ', QUOTENAME(DB_NAME()), N' اجرا می‌شود.');
        
        SELECT @Message AS SafetyMessage;
SafetyMessage
عملیات در پایگاه داده [a00b] اجرا می‌شود.

QUOTENAME نام را برای نمایش و تولید Identifier ایمن‌تر می‌کند. این نکته از تفسیر سطحی یا استفاده تکراری و بی‌هدف از DB_NAME جلوگیری می‌کند.

مثال 7: تشخیص master

یک شرط ساده برای جلوگیری از اجرای اسکریپت در master می‌سازیم. در این مثال، هدف تنها اجرای Query نیست؛ بلکه نشان دادن یک تصمیم فنی صحیح پیرامون DB_NAME است.

IF DB_NAME() = N'master'
            THROW 51001, N'اجرای این اسکریپت در master مجاز نیست.', 1;
        
        SELECT N'Context مجاز است' AS Result;
Result
Context مجاز است

کنترل Context را در ابتدای Migrationهای حساس قرار دهید. این نکته از تفسیر سطحی یا استفاده تکراری و بی‌هدف از DB_NAME جلوگیری می‌کند.

مثال 8: نام پایگاه در خروجی DMV

database_id موجود در DMV را خوانا می‌کنیم. در این مثال، هدف تنها اجرای Query نیست؛ بلکه نشان دادن یک تصمیم فنی صحیح پیرامون DB_NAME است.

SELECT TOP (10)
               mf.database_id,
               DB_NAME(mf.database_id) AS DatabaseName,
               mf.file_id,
               mf.name AS LogicalFileName
        FROM sys.master_files AS mf
        ORDER BY mf.database_id, mf.file_id;
database_idDatabaseNamefile_idLogicalFileName
7a00b1a00b

برای مشاهده همه پایگاه‌ها مجوزهای سطح Server لازم است. این نکته از تفسیر سطحی یا استفاده تکراری و بی‌هدف از DB_NAME جلوگیری می‌کند.

مثال 9: روش اشتباه در SQL پویا

نام را با QUOTENAME آماده می‌کنیم، نه با الحاق خام. در این مثال، هدف تنها اجرای Query نیست؛ بلکه نشان دادن یک تصمیم فنی صحیح پیرامون DB_NAME است.

DECLARE @DatabaseName sysname = DB_NAME();
        DECLARE @Sql nvarchar(max) =
            N'SELECT COUNT(*) AS ObjectCount FROM ' +
            QUOTENAME(@DatabaseName) +
            N'.sys.objects;';
        
        SELECT @Sql AS SafeSqlText;
SafeSqlText
SELECT COUNT(*) AS ObjectCount FROM [a00b].sys.objects;

DB_NAME خروجی معتبر می‌دهد، اما Identifier همچنان باید Quote شود. این نکته از تفسیر سطحی یا استفاده تکراری و بی‌هدف از DB_NAME جلوگیری می‌کند.

مثال 10: کاهش تکرار در گزارش

نام Database را یک بار در APPLY محاسبه می‌کنیم. در این مثال، هدف تنها اجرای Query نیست؛ بلکه نشان دادن یک تصمیم فنی صحیح پیرامون DB_NAME است.

SELECT d.database_id, x.DatabaseName, d.state_desc
        FROM sys.databases AS d
        CROSS APPLY (VALUES(DB_NAME(d.database_id))) AS x(DatabaseName)
        WHERE d.database_id <= 4;
database_idDatabaseNamestate_desc
1masterONLINE

برای گزارش بزرگ، ستون d.name مستقیم معمولاً ساده‌تر و کاراتر است. این نکته از تفسیر سطحی یا استفاده تکراری و بی‌هدف از DB_NAME جلوگیری می‌کند.

خطاهای رایج در کار با DB_NAME

خطای 1 در استفاده از DB_NAME

کاربر برای مشاهده نام بعضی پایگاه‌های داده باید مجوز مناسب داشته باشد. برای رفع این مشکل، ورودی و Context را از منبع معتبر بخوانید و نتیجه DB_NAME را پیش از ادامه منطق با شرط صریح کنترل کنید.

خطای 2 در استفاده از DB_NAME

در Azure SQL Database دامنه شناسه‌ها و دسترسی بین پایگاه‌ها محدودتر است. برای رفع این مشکل، ورودی و Context را از منبع معتبر بخوانید و نتیجه DB_NAME را پیش از ادامه منطق با شرط صریح کنترل کنید.

خطای 3 در استفاده از DB_NAME

نام پایگاه داده را برای ساخت SQL پویا بدون QUOTENAME به‌کار نبرید. برای رفع این مشکل، ورودی و Context را از منبع معتبر بخوانید و نتیجه DB_NAME را پیش از ادامه منطق با شرط صریح کنترل کنید.

ملاحظات Performance برای DB_NAME

از نظر کارایی، DB_NAME زمانی کم‌هزینه باقی می‌ماند که روی یک مقدار هدفمند یا مجموعه محدود اجرا شود. فراخوانی آن روی هزاران ردیف بدون Predicate اولیه می‌تواند CPU و زمان گزارش را افزایش دهد.

اگر گزارش به چند Property از چندین شیء نیاز دارد، استفاده Set-based از کاتالوگ‌ویو یا DMV مرتبط با database_id معمولاً بهتر از تکرار DB_NAME برای هر سلول است.

در Jobهای دوره‌ای، نتیجه DB_NAME را همراه Timestamp ذخیره کنید، اما Frequency نمونه‌برداری را متناسب با سرعت تغییر داده انتخاب کنید. جمع‌آوری بیش از حد، جدول تاریخچه را بدون ارزش تحلیلی بزرگ می‌کند.

برای محاسبات عددی پیرامون DB_NAME، نوع داده را قبل از ضرب یا تفریق ارتقا دهید و در سناریوهای تجمعی، Restart و بازنشانی Baseline را در نظر بگیرید.

Best Practiceهای اختصاصی DB_NAME

  1. ورودی DB_NAME را از نام یا شناسه معتبر و دارای Schema یا Context روشن تأمین کنید.
  2. نتیجه NULL در DB_NAME را از مقدار صفر، false یا رشته خالی جدا نگه دارید.
  3. نوع خروجی DB_NAME را پیش از ذخیره یا مقایسه به نوع مقصد مناسب تبدیل کنید.
  4. در گزارش‌های بزرگ، گزینه Set-based مرتبط با database_id را ارزیابی کنید.
  5. زمان Capture، نام Database و در صورت نیاز @@SPID را کنار نتیجه DB_NAME ثبت کنید.
  6. مجوز مشاهده Metadata یا DMV را با حداقل سطح دسترسی لازم تنظیم کنید. در مبحث DB_NAME
  7. مثال‌های DB_NAME را روی نسخه و Edition واقعی محیط هدف آزمایش کنید.
  8. برای SQL پویا، خروجی نامی DB_NAME را با QUOTENAME و پارامترسازی ایمن مصرف کنید.
سناریوی عملی و بهینه‌سازی DB_NAME در SQL Serverنمودار فنی اختصاصی DB_NAME شامل database_id، current database، sys.databases، metadata visibility، nvarcharروش پرخطرBest PracticeDB_NAMEکاربر برای مشاهده نام بعضی پایگاه‌های داده بایدر Azure SQL Database دامنه شناسه‌ها و دسترسی تفسیر خام DB_NAMEنمایش نام پایگاه جاریdatabase_idnvarchar

تصویر سوم، تفاوت روش پرخطر و Best Practice در استفاده از DB_NAME را مقایسه می‌کند؛ هدف آن جلوگیری از خطاهای مربوط به کاربر برای مشاهده نام بعضی پایگاه‌های داده باید مجوز مناسب داشته باشد. و بهبود تصمیم‌گیری فنی است.

سؤالات متداول اختصاصی DB_NAME

DB_NAME دقیقاً چه مسئله‌ای را در SQL Server حل می‌کند؟

تابع DB_NAME شناسه پایگاه داده را به نام آن تبدیل می‌کند و بدون پارامتر نام پایگاه داده جاری را می‌دهد. در عمل، در گزارش‌های چندپایگاه‌داده‌ای، پیام‌های عیب‌یابی و خروجی DMVها با کمک این تابع شناسه عددی پایگاه داده به نامی قابل فهم تبدیل می‌شود. بنابراین استفاده از DB_NAME زمانی ارزشمند است که خروجی آن در یک تصمیم فنی روشن مصرف شود، نه اینکه فقط برای نمایش عدد یا نام به کار رود.

نوع خروجی DB_NAME چیست و چگونه باید آن را مدیریت کرد؟

نوع خروجی این ابزار چنین است: nvarchar(128) یا NULL در صورت شناسه نامعتبر یا محدودیت مجوز مشاهده پایگاه داده. بهتر است پیش از تبدیل نوع، مقایسه یا درج در جدول گزارش، حالت NULL و محدوده مقدار را صریح کنترل کنید تا رفتار DB_NAME قابل پیش‌بینی بماند.

آیا DB_NAME در گزارش‌های سازمانی کاربرد تجاری دارد؟

بله. در سناریوهایی مانند نمایش نام پایگاه جاری و ترجمه database_id در گزارش‌ها، خروجی DB_NAME می‌تواند کیفیت گزارش مدیریتی را بالا ببرد. ارزش تجاری زمانی ایجاد می‌شود که این داده به هشدار، ظرفیت‌سنجی یا کاهش زمان عیب‌یابی متصل شود.

استفاده از DB_NAME در پروژه‌های بزرگ چه مزیتی دارد؟

در پروژه بزرگ، استانداردسازی نحوه استفاده از DB_NAME باعث می‌شود تیم توسعه، DBA و پشتیبانی یک تعریف مشترک از database_id و current database داشته باشند. این هماهنگی خطاهای تفسیر و دوباره‌کاری را کاهش می‌دهد.

تفاوت DB_NAME با گزینه نزدیک آن چیست؟

DB_NAME شناسه را به نام تبدیل می‌کند، اما DB_ID نام را به شناسه می‌برد. انتخاب صحیح باید بر اساس حجم داده، نیاز به خروجی Set-based و سطح جزئیات گزارش انجام شود؛ یک تابع scalar همیشه جایگزین کاتالوگ‌ویو یا DMV کامل نیست.

برای طراحی اسکریپت حرفه‌ای مبتنی بر DB_NAME چه خدماتی لازم می‌شود؟

در پروژه‌های حساس می‌توان منطق DB_NAME را در قالب رویه مانیتورینگ، Dashboard، گزارش زمان‌بندی‌شده یا کنترل Deployment پیاده کرد. تحلیل نیاز، تست روی نسخه واقعی SQL Server و مستندسازی خروجی، بخش‌های مهم خدمات مشاوره و انجام پروژه هستند.

رایج‌ترین خطا هنگام کار با DB_NAME چیست؟

یکی از خطاهای مهم این است که کاربر برای مشاهده نام بعضی پایگاه‌های داده باید مجوز مناسب داشته باشد. همچنین نادیده گرفتن NULL یا Context اجرای Query می‌تواند نتیجه‌ای ظاهراً معتبر ولی از نظر عملیاتی اشتباه تولید کند.

آیا فراخوانی زیاد DB_NAME بر Performance اثر می‌گذارد؟

یک فراخوانی منفرد معمولاً سبک است، اما اجرای DB_NAME روی مجموعه بسیار بزرگ یا در شرطی که برای هر ردیف محاسبه شود می‌تواند هزینه ایجاد کند. ابتدا ردیف‌ها را محدود کنید و در گزارش‌های وسیع، جایگزین Set-based را ارزیابی کنید.

بهترین روش استفاده از DB_NAME چیست؟

بهترین روش این است که ورودی DB_NAME اعتبارسنجی، نوع خروجی صریح، حالت NULL مدیریت و نتیجه همراه زمان و Context ثبت شود. همچنین باید مشخص باشد که خروجی برای نمایش، کنترل ایمنی یا تصمیم کارایی مصرف می‌شود.

DB_NAME با کدام نسخه‌های SQL Server سازگار است؟

در SQL Server و سرویس‌های سازگار مایکروسافت موجود است؛ جزئیات مجوز در محیط‌های ابری متفاوت است. با این حال، هنگام انتقال اسکریپت به Azure SQL یا Edition دیگر، Propertyها، مجوزهای Metadata و تفاوت‌های پلتفرم را روی همان محیط آزمایش کنید.

سؤالات مصاحبه درباره DB_NAME

در مصاحبه چگونه تفاوت ورودی و خروجی DB_NAME را توضیح می‌دهید؟

پاسخ مناسب باید Syntax یعنی DB_NAME ( [ database_id ] )، نوع خروجی و شرایط NULL را توضیح دهد و یک نمونه از نمایش نام پایگاه جاری ارائه کند.

چه زمانی به‌جای DB_NAME از کاتالوگ‌ویو یا DMV استفاده می‌کنید؟

وقتی گزارش چندین ردیف و چند Property نیاز دارد، روش Set-based معمولاً مناسب‌تر است؛ DB_NAME برای تبدیل یا بررسی هدفمند یک مقدار بسیار خواناست.

چگونه نتیجه نامعتبر DB_NAME را از مقدار false یا صفر جدا می‌کنید؟

با بررسی صریح IS NULL، اعتبارسنجی ورودی و در صورت نیاز Join با Metadata منبع، علت نتیجه را روشن می‌کنم. این توضیح به‌طور اختصاصی به DB_NAME مربوط است.

چه نکته Performance درباره DB_NAME مهم است؟

فراخوانی را پس از محدود کردن مجموعه داده انجام می‌دهم و از محاسبه تکراری DB_NAME در SELECT و WHERE جلوگیری می‌کنم.

یک سناریوی واقعی برای DB_NAME بیان کنید.

سناریوی مناسب می‌تواند ساخت هدر گزارش پشتیبان‌گیری باشد؛ در آن خروجی همراه Timestamp، نام Database و شناسه نشست ثبت می‌شود تا قابل پیگیری باشد.

چک‌لیست نهایی استفاده از DB_NAME

  • Syntax DB_NAME و ورودی‌های آن با نسخه هدف تطبیق داده شده است.
  • Context پایگاه داده یا Instance برای DB_NAME روشن است.
  • مجوز لازم برای Metadata یا DMV بررسی شده است. در مبحث DB_NAME
  • NULL، مقدار نامعتبر و حالت مرزی DB_NAME تست شده است.
  • نمونه خروجی با نوع داده واقعی مقایسه شده است. در مبحث DB_NAME
  • در Query بزرگ، هزینه فراخوانی تکراری DB_NAME اندازه‌گیری شده است.
  • جایگزین Set-based برای گزارش انبوه ارزیابی شده است. در مبحث DB_NAME
  • نتیجه نهایی همراه Timestamp و توضیح عملیاتی ثبت می‌شود. در مبحث DB_NAME

جمع‌بندی آموزش DB_NAME

DB_NAME ابزاری کوچک اما مؤثر برای در گزارش‌های چندپایگاه‌داده‌ای، پیام‌های عیب‌یابی و خروجی DMVها با کمک شناسه عددی پایگاه داده به نامی قابل فهم تبدیل می‌شود. است. استفاده حرفه‌ای از آن به اعتبارسنجی ورودی، تفسیر نوع خروجی، کنترل NULL و انتخاب Scope مناسب وابسته است.

پس از تسلط بر DB_NAME، برای مقایسه آن با سایر ابزارهای این مجموعه به مقاله مادر توابع کمکی Performance و Metadata در SQL Server بازگردید.

خدمات برنامه‌نویسی و پایگاه داده

برنامه‌نویسی در اصفهان

قبول سفارش‌های برنامه‌نویسی و پایگاه داده: 09131253620

انجام پروژه‌های برنامه‌نویسی، آموزش برنامه‌نویسی و آموزش پایگاه داده SQL Server با رویکرد حرفه‌ای، مستند و قابل توسعه انجام می‌شود.

مجموعه‌ای معتبر با سابقه فعالیت حرفه‌ای از سال ۱۳۷۵ شمسی

از سال ۱۳۷۵ شمسی تاکنون در زمینه طراحی و اجرای پروژه‌های برنامه‌نویسی، پایگاه داده، سیستم‌های تحت وب، وب‌سایت و راهکارهای نرم‌افزاری فعالیت می‌کنیم.

برای سفارش پروژه‌های برنامه‌نویسی و پایگاه داده، سیستم‌های تحت وب، وب‌سایت و راهکارهای نرم‌افزاری جدید، با شماره تلفن همراه 09131253620 تماس حاصل فرمایید.

ایتا، واتساپ و تماس مستقیم: +989131253620

تماس با ما

 

0 نظر

نظر محترم شما در مورد مقاله های وب سایت برنامه نویسی و پایگاه داده

نظرات محترم شما در خدمات رسانی بهتر ما را یاری می نمایند. لطفا اگر مایل بودید یک نظر ما را مهمان فرمائید. آدرس ایمیل و وب سایت شما نمایش داده نخواهد شد.

حرف 500 حداکثر