حسین احمدی
بنیانگذار توسینسو و برنامه نویس و توسعه دهنده ارشد وب

آموزش استفاده از دستور OUTPUT در SQL Server

عبارت OUTPUT در SQL Server به ما این امکان را می دهد تا اطلاعاتی در مورد رکورد هایی که توسط دستورات INSERT و UPDATE و DELETE تغییر داده می شوند کسب کنیم. برای مثال، جدولی را با مشخصات زیر در نظر بگیرید:

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران
CREATE TABLE [Customers]
(
    [Id] INT IDENTITY NOT NULL PRIMARY KEY,
    [FirstName] NVARCHAR(200) NOT NULL,
    [LastName] NVARCHAR(200) NOT NULL,
    [Website] NVARCHAR(200) NULL
);

همانطور که مشاهده می کنید جدول Customers شامل یک ستون از نوع int است که identity می باشد. یعنی با درج رکورد به صورت خودکار مقدار به آن تعلق می گیرد. حال مقداری را در این جدول درج می کنیم:

INSERT INTO [Customers] ([FirstName],[LastName]) VALUES (N'Hossein', N'Ahmadi');

با دستور بالا رکورد مورد نظر به جدول اضافه می شود، اما می خواهیم مقدار Id رکورد درج شده را نیز بدست بیاوریم. برای اینکار یک راه SELECT زدن بر روی جدول و بدست آوردن Id آخرین رکورد درج شده می باشد. یک روش دیگر آن استفاده از عبارت OUTPUT است. در مثال زیر، پس از درج در خروجی مقدار Id رکورد درج شده بازگردانده می شود:

INSERT INTO [Customers] ([FirstName],[LastName]) OUTPUT inserted.[Id] VALUES (N'Hossein',N'Ahmadi');

همانطور که مشاهده می کنید، در مقابل عبارت OUTPUT، عبارت inserted و بعد از آن نام ستون مورد نظر که در اینجا Id می باشد نوشته شده. inserted اشاره به رکورد درج شده دارد. اگر دوستان با ابزارهای ORM مانند Entity Framework کار کرده باشند اطلاع دارند که پس از درج یک entity، فیلد های Identity آن به صورت خودکار مقدار دهی می شود، Entity Framework و سایر ORM ها از عبارت OUTPUT برای اینکار استفاده می کنند.بگذارید یک مثال دیگر بزنیم، همه ما با دستور update آشنا هستیم. بوسیله دستور update می توان مقدار یک یا چند ستون را در بانک تغییر داد. اما update چگونه کار می کند؟ عملیات update در دو مرحله زیر انجام می شود:

  1. حذف رکورد یا رکورد هایی که عملیات update برای روی آن ها انجام می شود.
  2. درج رکورد هایی با مقادیر جدید در جدول

حال می خواهیم این موضوع را بوسیله عبارت output تست کنیم، به مثال زیر دقت کنید:

UPDATE [Customers]
SET [Website] = N'tosinso.com'
OUTPUT inserted.[Website],deleted.[Website]
WHERE Id = 12;

به کلمات inserted و deleted دقت کنید، inserted مقدار رکورد درج شده که در اینجا tosinso.com می باشد را در خروجی نمایش داده و deleted مقدار رکورد حذف شده که مقدار جاری ستون Website قبل از عملیات update است. امیدوارم که این نکته مورد توجه شما دوستان عزیز قرار گرفته باشد.


حسین احمدی
حسین احمدی

بنیانگذار توسینسو و برنامه نویس و توسعه دهنده ارشد وب

حسین احمدی ، بنیانگذار TOSINSO ، توسعه دهنده وب و برنامه نویس ، بیش از 12 سال سابقه فعالیت حرفه ای در سطح کلان ، مشاور ، مدیر پروژه و مدرس نهادهای مالی و اعتباری ، تخصص در پلتفرم دات نت و زبان سی شارپ ، طراحی و توسعه وب ، امنیت نرم افزار ، تحلیل سیستم های اطلاعاتی و داده کاوی ...

نظرات