ALTER PROCEDURE در SQL Server؛ تغییر امن رویه ذخیره‌شده

آموزش ALTER PROCEDURE در SQL Server با ۱۰ مثال عملی

توسط admin | گروه SQL Server | 1405/04/29

نظرات 0

آموزش ALTER PROCEDURE در SQL Server با ۱۰ مثال عملی

مقدمه

دستور ALTER PROCEDURE یکی از اجزای اصلی کار با Stored Procedure در Microsoft SQL Server است. این مقاله از تعریف و Syntax آغاز می‌کند و سپس با ده مثال مستقل، مدیریت پارامتر، رفتار NULL، خطا، امنیت و کارایی را بررسی می‌کند. هدف این است که اسکریپت نهایی در SSMS قابل آزمون و برای پروژه واقعی قابل اقتباس باشد.

برای مشاهده جایگاه ALTER PROCEDURE در چرخه کامل ایجاد، تغییر، اجرا و حذف رویه‌ها، راهنمای جامع رویه‌های ذخیره‌شده در SQL Server را نیز مطالعه کنید. لینک حاضر بدون وابستگی به دامنه ساخته شده و با جابه‌جایی سایت همچنان معتبر می‌ماند.

تعریف و کاربرد ALTER PROCEDURE

ALTER PROCEDURE برای تغییر تعریف یک رویه موجود بدون حذف هویت شیء استفاده می‌شود. در طراحی حرفه‌ای، این دستور فقط یک عبارت نحوی نیست؛ بخشی از قرارداد داده، مدل امنیت، چرخه انتشار و قابلیت مشاهده سامانه محسوب می‌شود.

اصل حرفه‌ای: پیش از استفاده از ALTER PROCEDURE، اثر آن بر قرارداد مصرف‌کننده، مجوزها، تراکنش و Planهای اجرایی را مشخص و قابل آزمون کنید.

Syntax استاندارد

ALTER PROCEDURE [schema_name.]procedure_name
    [ @parameter data_type [ = default ] [ OUTPUT ] [ ,...n ] ]
[ WITH procedure_option [ ,...n ] ]
AS
BEGIN
    sql_statement [ ; ] [ ...n ]
END;
GO

پارامترها و اجزای مهم

  • رویه هدف باید در Schema مشخص وجود داشته باشد؛ ALTER شیء جدید ایجاد نمی‌کند.
  • فهرست پارامترها تعریف کامل نسخه جدید است، نه فقط تفاوت با نسخه قبل.
  • بدنه AS جایگزین تعریف اجرایی قبلی می‌شود و باید همه SETها و مدیریت خطای لازم را دوباره داشته باشد.
  • مجوزهای مستقیم شیء عموماً با ALTER حفظ می‌شوند، ولی امضای خروجی برای مصرف‌کننده ممکن است تغییر کند.

نوع خروجی و اثر دستور

ALTER PROCEDURE نتیجه داده‌ای ندارد؛ تعریف کاتالوگ را تغییر می‌دهد و رفتار اجرای بعدی رویه تابع بدنه جدید خواهد بود.

تحلیل فنی و معماری

ALTER روش استاندارد انتشار نسخه تازه یک رویه موجود است، چون object_id و مجوزهای متصل به شیء را حفظ می‌کند. این مزیت به معنای بی‌خطر بودن تغییر نیست؛ افزودن پارامتر اجباری، تغییر نوع ستون خروجی یا حذف Result Set می‌تواند برنامه‌های مصرف‌کننده را بلافاصله بشکند.

پیش از تغییر، وابستگی‌های مستقیم و غیرمستقیم را بررسی کنید. کاتالوگ SQL Server بخشی از مراجع را نشان می‌دهد، اما فراخوان‌های Dynamic SQL، کد برنامه و Jobها ممکن است پنهان بمانند. جست‌وجوی مخزن کد، Query Store و تست یکپارچه مکمل تحلیل کاتالوگ هستند.

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

تغییر Query داخلی ممکن است Plan Cache را دگرگون کند. پس از انتشار فقط مدت یک اجرای آزمایشی را نبینید؛ توزیع پارامتر، تخمین Cardinality، Logical Reads، Spill، Memory Grant و مدت انتظار قفل را مقایسه کنید. Query Store برای مقایسه Plan پیش و پس از ALTER بسیار ارزشمند است.

ALTER داخل تراکنش قابل انجام است، ولی قفل Schema Modification می‌تواند اجرای هم‌زمان را متوقف کند. زمان انتشار، اندازه تراکنش و وابستگی DDL را مدیریت کنید. در سامانه پرترافیک، استقرار کوتاه همراه Health Check و قابلیت Rollback امن‌تر از Batch بزرگ و مبهم است.

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

ده مثال عملی و قابل اجرا

مثال 1: افزودن ستون خروجی

ابتدا Stub رویه را در صورت نبودن می‌سازیم و سپس با ALTER خروجی نسخه جدید را منتشر می‌کنیم.

IF OBJECT_ID(N'dbo.usp_AlterDemo01', N'P') IS NULL
    EXEC(N'CREATE PROCEDURE dbo.usp_AlterDemo01 AS SELECT 1 AS Stub;');
GO
ALTER PROCEDURE dbo.usp_AlterDemo01
AS
BEGIN
    SET NOCOUNT ON;
    SELECT N'نسخه دوم' AS VersionName, SYSDATETIME() AS ChangedAt;
END;
GO
EXEC dbo.usp_AlterDemo01;
خروجی یا وضعیتمقدار مورد انتظار
نتیجهVersionName = نسخه دوم

نکته کاربردی: ALTER شناسه شیء و مجوزهای مستقیم آن را حفظ می‌کند.

مثال 2: افزودن پارامتر اختیاری

برای سازگاری با فراخوان‌های موجود، پارامتر جدید را با مقدار پیش‌فرض اضافه می‌کنیم.

IF OBJECT_ID(N'dbo.usp_AlterDemo02', N'P') IS NULL
    EXEC(N'CREATE PROCEDURE dbo.usp_AlterDemo02 @Amount decimal(18,2) AS SELECT @Amount AS Net;');
GO
ALTER PROCEDURE dbo.usp_AlterDemo02
    @Amount decimal(18,2), @TaxRate decimal(5,2) = 0
AS
BEGIN
    SET NOCOUNT ON;
    SELECT @Amount * (1 + @TaxRate / 100.0) AS GrossAmount;
END;
GO
EXEC dbo.usp_AlterDemo02 100000, 10;
خروجی یا وضعیتمقدار مورد انتظار
نتیجهGrossAmount = 110000.00

نکته کاربردی: حذف یا تغییر نوع پارامتر یک Breaking Change است؛ افزودن اختیاری ریسک کمتری دارد.

مثال 3: اصلاح رفتار NULL

نسخه اولیه ممکن است NULL برگرداند؛ در نسخه اصلاحی قرارداد خروجی را با COALESCE پایدار می‌کنیم.

IF OBJECT_ID(N'dbo.usp_AlterDemo03', N'P') IS NULL
    EXEC(N'CREATE PROCEDURE dbo.usp_AlterDemo03 @Value int AS SELECT @Value AS ResultValue;');
GO
ALTER PROCEDURE dbo.usp_AlterDemo03 @Value int = NULL
AS
BEGIN
    SET NOCOUNT ON;
    SELECT COALESCE(@Value, 0) AS ResultValue;
END;
GO
EXEC dbo.usp_AlterDemo03 NULL;
خروجی یا وضعیتمقدار مورد انتظار
نتیجهResultValue = 0

نکته کاربردی: رفتار NULL را در قرارداد API پایگاه داده و تست‌های رگرسیون ثبت کنید.

مثال 4: افزودن OUTPUT

رویه موجود را طوری تغییر می‌دهیم که مقدار محاسبه‌شده از راه پارامتر خروجی نیز قابل دریافت باشد.

IF OBJECT_ID(N'dbo.usp_AlterDemo04', N'P') IS NULL
    EXEC(N'CREATE PROCEDURE dbo.usp_AlterDemo04 AS SELECT 1 AS Stub;');
GO
ALTER PROCEDURE dbo.usp_AlterDemo04
    @Input int, @Squared int OUTPUT
AS
BEGIN
    SET NOCOUNT ON;
    SET @Squared = @Input * @Input;
END;
GO
DECLARE @Answer int;
EXEC dbo.usp_AlterDemo04 9, @Answer OUTPUT;
SELECT @Answer AS SquaredValue;
خروجی یا وضعیتمقدار مورد انتظار
نتیجهSquaredValue = 81

نکته کاربردی: مصرف‌کنندگان قدیمی باید پیش از تغییر امضای اجباری شناسایی شوند.

مثال 5: افزودن اعتبارسنجی و THROW

قانون تجاری را در ابتدای رویه بررسی می‌کنیم تا داده نامعتبر پیش از عملیات سنگین رد شود.

IF OBJECT_ID(N'dbo.usp_AlterDemo05', N'P') IS NULL
    EXEC(N'CREATE PROCEDURE dbo.usp_AlterDemo05 @Qty int AS SELECT @Qty AS Qty;');
GO
ALTER PROCEDURE dbo.usp_AlterDemo05 @Qty int
AS
BEGIN
    SET NOCOUNT ON;
    IF @Qty <= 0 THROW 51005, N'تعداد باید مثبت باشد.', 1;
    SELECT @Qty AS AcceptedQuantity;
END;
GO
EXEC dbo.usp_AlterDemo05 4;
خروجی یا وضعیتمقدار مورد انتظار
نتیجهAcceptedQuantity = 4

نکته کاربردی: شماره خطای سفارشی بالاتر از 50000 انتخاب شود تا پایش آن ساده باشد.

مثال 6: تغییر نتیجه به شکل پایدار

نام و نوع ستون‌های Result Set را صریح نگه می‌داریم تا نگاشت ORM پس از انتشار نشکند.

IF OBJECT_ID(N'dbo.usp_AlterDemo06', N'P') IS NULL
    EXEC(N'CREATE PROCEDURE dbo.usp_AlterDemo06 AS SELECT 1 AS ItemId;');
GO
ALTER PROCEDURE dbo.usp_AlterDemo06
AS
BEGIN
    SET NOCOUNT ON;
    SELECT CAST(1 AS int) AS ItemId,
           CAST(N'نمونه' AS nvarchar(50)) AS ItemTitle;
END;
GO
EXEC dbo.usp_AlterDemo06;
خروجی یا وضعیتمقدار مورد انتظار
نتیجهItemId = 1 و ItemTitle = نمونه

نکته کاربردی: تغییر ترتیب، نام یا نوع ستون خروجی می‌تواند قرارداد مصرف‌کننده را بشکند.

مثال 7: حفظ مجوز پس از ALTER

مجوزی به Role می‌دهیم، رویه را ALTER می‌کنیم و سپس مجوز باقی‌مانده را کنترل می‌کنیم.

IF DATABASE_PRINCIPAL_ID(N'AlterReaders') IS NULL CREATE ROLE AlterReaders;
IF OBJECT_ID(N'dbo.usp_AlterDemo07', N'P') IS NULL
    EXEC(N'CREATE PROCEDURE dbo.usp_AlterDemo07 AS SELECT 1 AS Value;');
GRANT EXECUTE ON dbo.usp_AlterDemo07 TO AlterReaders;
GO
ALTER PROCEDURE dbo.usp_AlterDemo07 AS SELECT 2 AS Value;
GO
SELECT permission_name
FROM sys.database_permissions
WHERE major_id = OBJECT_ID(N'dbo.usp_AlterDemo07');
خروجی یا وضعیتمقدار مورد انتظار
نتیجهpermission_name شامل EXECUTE است

نکته کاربردی: DROP و CREATE ممکن است مجوز مستقیم را از بین ببرد؛ ALTER برای انتشار تغییر مناسب‌تر است.

مثال 8: مشاهده تاریخ تغییر

پس از ALTER، متادیتای sys.procedures را برای ممیزی زمان تغییر مشاهده می‌کنیم.

IF OBJECT_ID(N'dbo.usp_AlterDemo08', N'P') IS NULL
    EXEC(N'CREATE PROCEDURE dbo.usp_AlterDemo08 AS SELECT 1 AS V;');
GO
ALTER PROCEDURE dbo.usp_AlterDemo08 AS SELECT 8 AS V;
GO
SELECT name, modify_date
FROM sys.procedures
WHERE object_id = OBJECT_ID(N'dbo.usp_AlterDemo08');
خروجی یا وضعیتمقدار مورد انتظار
نتیجهیک ردیف با نام رویه و modify_date جدید

نکته کاربردی: modify_date جایگزین کنترل نسخه نیست، اما برای بررسی سریع عملیات مفید است.

مثال 9: اصلاح الگوی غیر SARGable

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

IF OBJECT_ID(N'dbo.usp_AlterDemo09', N'P') IS NULL
    EXEC(N'CREATE PROCEDURE dbo.usp_AlterDemo09 @D date AS SELECT @D AS D;');
GO
ALTER PROCEDURE dbo.usp_AlterDemo09 @ReportDate date
AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @NextDate date = DATEADD(day, 1, @ReportDate);
    SELECT @ReportDate AS RangeStart, @NextDate AS RangeEnd;
    -- الگوی بهینه: WHERE CreatedAt >= @ReportDate AND CreatedAt < @NextDate
END;
GO
EXEC dbo.usp_AlterDemo09 '2026-07-20';
خروجی یا وضعیتمقدار مورد انتظار
نتیجهRangeStart = 2026-07-20 و RangeEnd = 2026-07-21

نکته کاربردی: پس از ALTER، Actual Plan و Logical Reads را با نسخه قبلی مقایسه کنید.

مثال 10: استقرار اتمی با تراکنش

چند تغییر DDL مرتبط را در تراکنش قرار می‌دهیم تا در صورت خطا نسخه نیمه‌کاره باقی نماند.

IF OBJECT_ID(N'dbo.usp_AlterDemo10', N'P') IS NULL
    EXEC(N'CREATE PROCEDURE dbo.usp_AlterDemo10 AS SELECT 1 AS V;');
GO
BEGIN TRY
    BEGIN TRANSACTION;
    EXEC(N'ALTER PROCEDURE dbo.usp_AlterDemo10 AS BEGIN SET NOCOUNT ON; SELECT 10 AS V; END;');
    COMMIT;
END TRY
BEGIN CATCH
    IF XACT_STATE() <> 0 ROLLBACK;
    THROW;
END CATCH;
GO
EXEC dbo.usp_AlterDemo10;
خروجی یا وضعیتمقدار مورد انتظار
نتیجهV = 10

نکته کاربردی: در انتشار واقعی، قفل‌های Schema و مدت تراکنش DDL را کوتاه نگه دارید.

خطاهای رایج

  • نوشتن نام شیء بدون Schema در ALTER PROCEDURE باعث Resolution مبهم، خطای محیطی و گاهی استفاده کمتر مؤثر از Plan Cache می‌شود.
  • یکسان ندانستن مقدار پیش‌فرض با NULL صریح می‌تواند منطق تجاری را تغییر دهد؛ هر دو مسیر را جداگانه آزمایش کنید.
  • الحاق مستقیم ورودی کاربر به Dynamic SQL خطر تزریق، Conversion و تولید Planهای پراکنده ایجاد می‌کند.
  • نادیده‌گرفتن مجوز، وابستگی یا شکل Result Set باعث شکست پس از استقرار می‌شود، حتی اگر اسکریپت DDL بدون خطا اجرا شده باشد.
  • بلعیدن خطا در CATCH و برنگرداندن آن به فراخواننده، پایش و Rollback لایه کاربرد را غیرقابل اعتماد می‌کند.

ملاحظات Performance و بهینه‌سازی

برای سنجش ALTER PROCEDURE از حدس استفاده نکنید. Baseline شامل Duration، CPU، Logical Reads، تعداد اجرا و Waitها بسازید؛ سپس Actual Execution Plan و داده Query Store را پیش و پس از تغییر مقایسه کنید. تفاوت نوع پارامتر با ستون، Parameter Sniffing، آمار قدیمی و ایندکس نامناسب از علت‌های رایج افت کارایی‌اند.

  • نام Schema و نوع پارامترها را دقیق و همسان با ستون مقصد نگه دارید.
  • از SELECT * در قراردادهای پایدار دوری و ستون‌های لازم را صریح انتخاب کنید.
  • تراکنش را کوتاه نگه دارید و دسترسی به اشیا را با ترتیب ثابت انجام دهید تا Deadlock کمتر شود.
  • WITH RECOMPILE را راه‌حل پیش‌فرض ندانید؛ هزینه Compilation و تنوع پارامتر را با داده واقعی بسنجید.
  • برای رگرسیون از Query Store و برای رخدادهای دقیق از Extended Events استفاده کنید.

Best Practices

  • اسکریپت را idempotent و در کنترل نسخه نگهداری کنید.
  • برای تغییرهای مخرب، برنامه Rollback و Health Check آماده داشته باشید.
  • کمترین سطح مجوز را از طریق Role و GRANT هدفمند پیاده کنید.
  • ورودی، خروجی، NULL، خطا و سازگاری نسخه را در تست خودکار پوشش دهید.
  • نام‌گذاری تجاری پایدار و توضیح مسئولیت رویه را در مستند فنی ثبت کنید.
  • کد Production را با داده نماینده و حجم نزدیک به واقعیت آزمایش کنید.

سؤالات متداول

۱. ALTER PROCEDURE در SQL Server دقیقاً چه کاری انجام می‌دهد؟

این دستور برای تغییر تعریف یک رویه موجود بدون حذف هویت شیء به‌کار می‌رود. اثر آن در سطح پایگاه داده ثبت می‌شود و باید با نام‌گذاری روشن، کنترل نسخه و آزمون قابل تکرار همراه باشد تا رفتار محیط توسعه و تولید یکسان بماند.

۲. از چه نسخه‌ای می‌توان از قابلیت‌های جدید ALTER PROCEDURE استفاده کرد؟

هسته دستور در نسخه‌های قدیمی SQL Server نیز وجود دارد، اما گزینه‌هایی مانند CREATE OR ALTER یا DROP IF EXISTS به نسخه وابسته‌اند. پیش از استقرار، Compatibility Level و مستندات همان نسخه را بررسی کنید.

۳. آیا استفاده از ALTER PROCEDURE هزینه نگهداری سامانه را کاهش می‌دهد؟

اگر استاندارد کدنویسی، ثبت تغییر و پایش اجرا رعایت شود، بله؛ منطق متمرکز و قابل ممیزی هزینه خطای انسانی را کم می‌کند. برای سامانه‌های حساس، بازبینی تخصصی و آزمون کارایی پیش از انتشار ارزش تجاری مستقیمی دارد.

۴. چه زمانی برای طراحی مبتنی بر ALTER PROCEDURE به مشاوره نیاز داریم؟

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

۵. تفاوت کاربرد ALTER PROCEDURE با اجرای مستقیم Query چیست؟

ALTER PROCEDURE یک واحد نام‌دار و قابل کنترل در چرخه استقرار ایجاد می‌کند، در حالی که Query مستقیم معمولاً پراکنده‌تر است. انتخاب صحیح به نیاز استفاده مجدد، امنیت، پارامتردهی، کش طرح اجرا و مسئولیت تیم‌ها بستگی دارد.

۶. چگونه می‌توان پیاده‌سازی ALTER PROCEDURE را برای پروژه سفارش داد؟

ابتدا ورودی‌ها، خروجی‌ها، SLA، سطح دسترسی و سناریوهای خطا مستند می‌شوند؛ سپس نمونه قابل آزمون، اسکریپت استقرار و معیار پذیرش تهیه می‌شود. این روش تحویل پروژه را قابل سنجش و پشتیبانی را ساده‌تر می‌کند.

۷. رایج‌ترین خطای مرتبط با ALTER PROCEDURE چیست؟

رایج‌ترین خطا نادیده‌گرفتن زمینه اجرایی، Schema یا وابستگی‌هاست. به‌ویژه کنترل نوع پارامتر، Schema، مجوز و وابستگی ضروری است. ثبت متن کامل خطا، شماره خط و نام رویه در CATCH، یافتن علت را بسیار سریع‌تر می‌کند.

۸. ALTER PROCEDURE چه اثری بر Performance دارد؟

خود دستور فقط بخشی از مسئله است؛ کیفیت Queryهای داخل رویه، نوع پارامتر، آمار، ایندکس و هم‌زمانی تعیین‌کننده‌اند. Query Store، Actual Execution Plan و Extended Events ابزارهای مناسب سنجش پیش و پس از تغییر هستند.

۹. بهترین روش استفاده از ALTER PROCEDURE چیست؟

اسکریپت idempotent، نام Schema-qualified، کمترین سطح مجوز، قرارداد پایدار، SET NOCOUNT ON، مدیریت خطا و آزمون بازگشت را هم‌زمان رعایت کنید. هر تغییر باید در کنترل نسخه و فرایند انتشار ثبت شود.

۱۰. آیا ALTER PROCEDURE با Azure SQL و نسخه‌های جدید سازگار است؟

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

سؤالات مصاحبه

۱. تفاوت Result Set، OUTPUT و RETURN هنگام ALTER PROCEDURE چیست؟

Result Set داده جدولی، OUTPUT مقدار پارامتری و RETURN کد وضعیت int است. پاسخ حرفه‌ای باید درباره قرارداد، نوع داده و نحوه دریافت هر سه در فراخواننده توضیح دهد.

۲. چرا Schema-qualified بودن نام در ALTER PROCEDURE مهم است؟

ابهام نام را از بین می‌برد، امنیت و خوانایی را بهتر می‌کند و Resolution شیء و استفاده مجدد از Plan را قابل پیش‌بینی‌تر می‌سازد.

۳. چگونه SQL Injection را در اجرای پویا مهار می‌کنید؟

مقادیر را با sp_executesql پارامتری ارسال می‌کنیم، نام اشیا را از Allowlist کنترل‌شده می‌گیریم، QUOTENAME را فقط برای Identifier معتبر به‌کار می‌بریم و مجوز حساب اجرا را محدود نگه می‌داریم.

۴. پس از تغییر رویه چه شاخص‌هایی را مقایسه می‌کنید؟

Duration، CPU، Logical Reads، Cardinality Estimate، Memory Grant، Spill، Waitها و Planهای Query Store باید با Baseline و چند توزیع پارامتر مقایسه شوند.

۵. طرح بازگشت مناسب چیست؟

متن نسخه قبلی، ترتیب بازگردانی وابستگی‌ها، مجوزها، آزمون سلامت و معیار تصمیم Rollback از پیش آماده می‌شوند. بازگشت نباید در زمان حادثه از حافظه طراحی شود.

چک‌لیست نهایی

  • Syntax و نسخه پشتیبان ALTER PROCEDURE بررسی شد.
  • Schema، نام و انواع پارامتر صریح‌اند.
  • رفتار NULL و مقادیر مرزی تست شده است.
  • مجوزها حداقلی و قابل ممیزی‌اند.
  • خطا و تراکنش مسیر موفق و ناموفق را پوشش می‌دهند.
  • Baseline و نتیجه آزمون Performance ثبت شده است.
  • اسکریپت انتشار و بازگشت در کنترل نسخه قرار دارد.

جمع‌بندی

ALTER PROCEDURE زمانی ارزش واقعی ایجاد می‌کند که همراه قرارداد روشن، امنیت حداقلی، مدیریت خطا و سنجش کارایی استفاده شود. مثال‌های این مقاله الگوهای پایه تا حرفه‌ای را پوشش دادند؛ آن‌ها را با Schema، نوع داده و سیاست انتشار پروژه خود تطبیق دهید و پیش از Production در محیط آزمایشی اجرا کنید.

برای مرور همه دستورات این مجموعه، به مقاله مادر Stored Procedures در SQL Server بازگردید.

 

0 نظر

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

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

حرف 500 حداکثر

اطلاعات تماس

  • آدرس:اصفهان-خیابان ام کلثوم غربی - بعد خیابان تخم چی - بیست متر بعد از پیتزا ننه شب - کوچه تعمیر گاه سمار زغالی - پلاک 354 - درب مشکی - طبقه هفتم
  • آدرس ایمیل:najafzade@gmail.com
  • وب سایت:http://www.a00b.com/
  • تلفن ثابت:(+98)9131253620
  • تلفن همراه:09131253620