"

آشنایی با Output Clause در SQL Server,مزایای Output Clause در SQL Server,کاربرد Output Clause در سیستم‌های حسابداری

آشنایی با Output Clause در SQL Server

Output Clause در SQL Server روشی برای دریافت اطلاعات رکوردهای درج، ویرایش یا حذف‌شده و ثبت تغییرات داده‌ها است.

تیم تحریریه
2
0
08 مرداد 1405
لینک کوتاه

آشنایی با Output Clause در SQL Server

در SQL Server، یکی از قابلیت‌های بسیار کاربردی که بسیاری از برنامه‌نویسان و مدیران پایگاه داده از آن غافل هستند، Output Clause است.
این قابلیت به شما اجازه می‌دهد هنگام اجرای دستورات INSERT، UPDATE، DELETE و MERGE، اطلاعات رکوردهای تغییر یافته را بدون نیاز به اجرای یک Query جداگانه دریافت کنید.

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

 



🌟 آیا می‌خواهید به یک متخصص پایگاه داده تبدیل شوید و در دنیای فناوری اطلاعات بدرخشید؟

با دوره آموزشی SQL Server ما، شما می‌توانید به راحتی و با روشی عملی، تمام مهارت‌های لازم را یاد بگیرید!

این دوره به شما آموزش می‌دهد که چگونه داده‌ها را به بهترین شکل مدیریت کنید، گزارش‌های قدرتمند بسازید و به تحلیل‌های عمیق دست یابید.

با محتوای جذاب و پروژه‌های واقعی، شما نه تنها تئوری را یاد می‌گیرید، بلکه توانایی‌های عملی خود را نیز تقویت می‌کنید.

پس فرصت را از دست ندهید! همین امروز به جمع یادگیرندگان ما بپیوندید و اولین قدم را به سوی آینده شغلی روشن‌تر بردارید!

 همین حالا شروع کنید و به دنیای داده‌ها بپیوندید!



 

Output Clause چیست؟

Output Clause قابلیتی در SQL Server است که نتیجه عملیات تغییر داده‌ها (Data Modification) را به صورت مستقیم برمی‌گرداند.

به عبارت دیگر، هنگامی که یک دستور INSERT، UPDATE یا DELETE اجرا می‌شود، SQL Server اطلاعات رکوردهای درگیر را در دو جدول منطقی قرار می‌دهد:

 

  • INSERTED
  • DELETED

 

Output Clause می‌تواند اطلاعات این دو جدول را نمایش دهد یا در جدول دیگری ذخیره کند.

 

مزایای Output Clause در SQL Server

استفاده از Output Clause مزایای فراوانی دارد:

  • کاهش تعداد Queryها

  • افزایش سرعت اجرای برنامه

  • ثبت تغییرات به صورت خودکار

  • مناسب برای سیستم‌های حسابداری

  • مناسب برای سیستم‌های مالی

  • امکان مشاهده مقدار قبلی و مقدار جدید

  • جلوگیری از اجرای Query اضافی

  • مناسب برای تهیه گزارش تغییرات

  • امکان ذخیره لاگ تغییرات



مزایای Output Clause در SQL Server

ساختار کلی Output Clause در SQL Server

ساختار کلی آن به شکل زیر است:

 

INSERT ...

OUTPUT ...

VALUES (...)

 

یا

 

UPDATE ...

SET ...

OUTPUT ...

WHERE ...

 

یا

 

DELETE ...

OUTPUT ...

WHERE ...



جدول INSERTED چیست؟

جدول منطقی INSERTED شامل اطلاعات جدید رکوردها است.

در دستورات زیر قابل استفاده است:


  • INSERT
  • UPDATE
  • MERGE

 

مثال:

 

OUTPUT INSERTED.*



جدول DELETED چیست؟

جدول DELETED اطلاعات قبلی رکوردها را نگهداری می‌کند.

در دستورات زیر استفاده می‌شود:

 

  • DELETE
  • UPDATE
  • MERGE

 

مثال:

 

OUTPUT DELETED.*



استفاده از Output در دستور INSERT

فرض کنید جدول زیر را داریم:

 

CREATE TABLE Employees

(

Id INT IDENTITY,

FullName NVARCHAR(100),

Salary INT

)

 

اکنون اطلاعات جدید وارد می‌کنیم.

 

INSERT INTO Employees

(

FullName,

Salary

)

OUTPUT INSERTED.*

VALUES

(

'Ali Ahmadi',

15000000

);

خروجی:

Id  FullName  Salary
1   Ali Ahmadi 15000000

 

بدون اجرای SELECT، اطلاعات درج شده نمایش داده می‌شود.

 

دریافت فقط شناسه ایجاد شده

گاهی فقط مقدار Identity نیاز است.

INSERT INTO Employees

(

FullName,

Salary

)

OUTPUT INSERTED.Id

VALUES

(

'Sara',

20000000

);

 

خروجی

 

2

 

این روش از استفاده از SCOPE_IDENTITY() نیز در بسیاری از سناریوها انعطاف‌پذیرتر است، به‌ویژه زمانی که چندین ردیف به‌صورت هم‌زمان درج می‌شوند.

 

استفاده از Output در UPDATE

فرض کنید حقوق کارمندان افزایش پیدا کند.

 

UPDATE Employees

SET Salary += 3000000

OUTPUT

DELETED.Salary,

INSERTED.Salary

WHERE Id=1;

 

خروجی

حقوق قبلی  حقوق جدید
15000000  18000000



مشاهده اطلاعات قبل و بعد از تغییر

می‌توان اطلاعات کامل را دریافت کرد.

 

UPDATE Employees

SET Salary=25000000




OUTPUT




DELETED.FullName,




DELETED.Salary,




INSERTED.Salary




WHERE Id=1;

 

خروجی

نام  حقوق قبلی  حقوق جدید
Ali Ahmadi  18000000  25000000


استفاده در DELETE

DELETE Employees

OUTPUT DELETED.*

WHERE Id=1;

 

قبل از حذف، اطلاعات رکورد نمایش داده می‌شود.

 

ذخیره خروجی داخل جدول دیگر

یکی از جذاب‌ترین قابلیت‌های Output، ذخیره اطلاعات در جدول دیگر است.

ابتدا جدول لاگ را ایجاد می‌کنیم.

 

CREATE TABLE EmployeeLog

(

EmployeeId INT,

FullName NVARCHAR(100),

Salary INT

)

اکنون:

 

DELETE Employees


OUTPUT


DELETED.Id,


DELETED.FullName,


DELETED.Salary


INTO EmployeeLog


WHERE Id=3;

 

رکورد حذف شده داخل جدول لاگ ذخیره خواهد شد.

 

استفاده در UPDATE همراه با ذخیره لاگ

UPDATE Employees

SET Salary +=1000000

OUTPUT

DELETED.Id,

DELETED.Salary,

INSERTED.Salary

INTO SalaryHistory

WHERE Salary<10000000;

 

این روش برای ثبت تاریخچه تغییرات حقوق بسیار کاربردی است.

 

استفاده از Output در INSERT چند رکوردی

INSERT Employees

(

FullName,

Salary

)



OUTPUT INSERTED.*

VALUES

('Ali',12000000),

('Sara',14000000),

('Reza',18000000);

 

تمام رکوردهای درج شده نمایش داده می‌شوند.

 

استفاده در MERGE

Output در دستور MERGE بسیار قدرتمند است.

 

MERGE Employees AS T

USING NewEmployees AS S

ON T.Id=S.Id

WHEN MATCHED THEN

UPDATE SET

T.Salary=S.Salary

WHEN NOT MATCHED THEN

INSERT

(

FullName,

Salary

)




VALUES

(

S.FullName,

S.Salary

)




OUTPUT




$action,




INSERTED.*,




DELETED.*;

 

ستون $action مشخص می‌کند که عملیات انجام‌شده از نوع INSERT، UPDATE یا DELETE بوده است.

 

کاربرد Output Clause در سیستم‌های حسابداری

تقریباً تمام نرم‌افزارهای مالی از Output استفاده می‌کنند.

مثلاً:

  • ثبت تغییر موجودی

  • ثبت تغییر قیمت

  • ثبت تغییر حساب‌ها

  • ثبت حذف اسناد

  • ذخیره لاگ کاربران


کاربرد Output Clause در سیستم‌های حسابداری


کاربرد Output Clause در سیستم‌های فروشگاهی

فرض کنید کالا ویرایش شود.

 

UPDATE Products

SET Price=650000

OUTPUT

DELETED.Price,

INSERTED.Price

WHERE Id=10;

 

قیمت قبلی و جدید ذخیره می‌شود.

 

استفاده برای Audit

بسیاری از شرکت‌ها تمام تغییرات کاربران را ثبت می‌کنند.

Output بهترین ابزار برای این کار است.

مثلاً:

 

  • چه کسی تغییر داد؟
  • چه زمانی تغییر داد؟
  • مقدار قبلی چه بود؟
  • مقدار جدید چیست؟



ثبت تاریخچه تغییرات

فرض کنید جدول زیر وجود دارد.

 

PriceHistory

 

هر بار قیمت تغییر کند:

 

UPDATE Products




SET Price=900000




OUTPUT




INSERTED.Id,




DELETED.Price,




INSERTED.Price,




GETDATE()




INTO PriceHistory;

 

اکنون تمام تاریخچه قیمت‌ها ذخیره خواهد شد.

 

استفاده همراه با Table Variable

می‌توان خروجی را در یک متغیر جدولی ذخیره کرد.

 

DECLARE @Result TABLE

(

Id INT,

Name NVARCHAR(100)

)




INSERT Employees




OUTPUT




INSERTED.Id,




INSERTED.FullName




INTO @Result




VALUES




('Mohammad',12000000);




SELECT *




FROM @Result;

 

این روش زمانی مفید است که بخواهید از نتایج عملیات در ادامه همان اسکریپت استفاده کنید.

 

تفاوت Output با SELECT در  SQL Server

بسیاری از افراد بعد از INSERT یک SELECT اجرا می‌کنند.

 

مثلاً:

INSERT ...

SELECT ...

 

اما Output:

 

  • سریع‌تر است.
  • فقط رکوردهای تغییر یافته را برمی‌گرداند.
  • نیاز به Query اضافی ندارد.
  • خوانایی کد را افزایش می‌دهد.



تفاوت Output با Trigger

برخی تصور می‌کنند Output جایگزین Trigger است، اما این دو کاربردهای متفاوتی دارند.


Clause Trigger Output 
در همان دستور اجرا می‌شود  بعد از اجرای دستور فعال می‌شود
ساده‌تر است  پیچیده‌تر است
سریع‌تر است  ممکن است سربار بیشتری ایجاد کند
مناسب دریافت اطلاعات  مناسب اجرای منطق‌های پیچیده

 

در بسیاری از سناریوها، استفاده از Output برای ثبت اطلاعات ساده و گزارش تغییرات، از Trigger سبک‌تر و قابل‌فهم‌تر است.

 

محدودیت‌های Output Clause

هرچند Output قابلیت قدرتمندی است، اما محدودیت‌هایی نیز دارد:

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

بهترین روش‌های استفاده Output Clause

برای بهره‌گیری بهتر از Output Clause، این نکات را رعایت کنید:

  • تنها ستون‌های موردنیاز را در بخش OUTPUT انتخاب کنید.
  • برای ثبت لاگ، از OUTPUT INTO استفاده کنید.
  • در عملیات گروهی، نتایج را در جدول موقت یا Table Variable ذخیره کنید.
  • برای سیستم‌های حساس، خروجی را همراه با زمان و شناسه کاربر ثبت کنید.
  • از ترکیب Output با تراکنش‌ها (Transactions) برای حفظ یکپارچگی داده‌ها بهره ببرید.


بهترین روش‌های استفاده Output Clause

جمع‌بندی

Output Clause یکی از قابلیت‌های ارزشمند SQL Server برای مشاهده و ثبت اطلاعات رکوردهای تغییر یافته است.
این ویژگی امکان دریافت مقادیر قبل و بعد از تغییر، ذخیره خروجی در جدول‌های لاگ، ثبت تاریخچه تغییرات و حذف نیاز به اجرای Queryهای اضافی را فراهم می‌کند.

در پروژه‌های واقعی مانند نرم‌افزارهای مالی، فروشگاهی، منابع انسانی و سیستم‌های مدیریت داده، استفاده از Output Clause باعث افزایش کارایی، ساده‌تر شدن کدنویسی و بهبود قابلیت ردیابی تغییرات می‌شود.
اگر در برنامه‌های خود نیاز به ثبت یا بررسی تغییرات داده‌ها دارید، Output Clause یکی از بهترین ابزارهای داخلی SQL Server برای انجام این کار است.

محصولات مرتبط

کاربران ما

شما هم نظرتون با ما دریاره “آشنایی با Output Clause در SQL Server” اشتراک بزارید

برای ارسال نظر لطفا ورود یا ثبت نام کنید

منو