آشنایی با عبارت 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 است. امیدوارم که این نکته مورد توجه شما دوستان عزیز قرار گرفته باشد. ITPRO باشید

نویسنده: حسین احمدی

انجمن تخصصی فناوری اطلاعات ایران

1 نظر
حسن ضرابی

با سلام و خسته نباشید خدمت مهندس عزیز

از بابت این مقاله بسیار خوب ممنونم خیلی عالی بود مهندس جان

امیدوارم این کار پایدار و ادامه دار باشد

با تشکر از شما دوست عزیز

نظر شما
برای ارسال نظر باید وارد شوید.
از سرتاسر توسینسو
تنظیمات حریم خصوصی
تائید صرفنظر
×

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