Identity چیست – قسمت دوم

Identity چیست – قسمت دوم

نوشته شده توسط: مسعود طاهری
۱۱ تیر ۱۳۹۴
زمان مطالعه: 6 دقیقه
۵
(۱)

مقدمه

در مقاله اول از این بحث به تعریف Identity پرداختیم و همانگونه که می‌دانید مقدار Identity پس از درج به آن تخصیص می‌یابد چنانچه بخواهید به این مقدار دسترسی پیدا کنید چندین روش به ازای اینکار وجود دارد که ما در این مقاله سه روش معمول را بررسی خواهیم نمود.
۱- استفاده از متغییر سیستمی Identity@@
۲- استفاده از تابع ()Scope_Identity
۳- استفاده از تابع Ident_Current
هر سه این توابع مقدار Identity ایجاد شده برای جداول را نمایش می‌دهند. اما تفاوت هایی باهم دارند که در ادامه مقاله  این تفاوت‌ها بررسی شده است.

 متغییر سیستمی Identity@@

این متغییر سیستمی حاوی آخرین Identity ایجاد شده به ازای Session جاری شما است. لازم به ذکر است اگر به واسته Insert شما، Identity دیگری در یک حوزه دیگر (مانند یک Trigger) ایجاد شود مقدار موجود در این متغییر حاوی آخرین Identity ایجاد شده است. (یعنی Identity ایجاد شده توسط آن تریگر و نه خود جدول). لازم به ذکر است این موضوع به طور کامل در ادامه مقاله شرح داده شده است.

استفاده از تابع ()Scope_Identity

با استفاده از این تابع می‌توانیم آخرین Identify ایجا دشده به ازای Session جاری را بدست آوریم. لازم به ذکر است مقادیر Identity ایجاد شده توسط سایر حوزه‌ها تاثیر در مقدار بازگشتی توسط این تابع ندارد. در ادامه مقاله این موضوع به طور کامل بررسی شده است.

استفاده از تابع ()ident_Current

این تابع آخرین مقدار Identity موجود در یک جدول را نمایش می‌دهد. ذکر این نکته ضروری است که Identity ایجاد شده توسط سایر Sessionها هم روی خروجی این تابع تاثیرگذار است. چون این تابع آخرین Identity موجود در جدول را به شما نمایش می‌دهد و نه Identity ایجاد شده به ازای یکSession  را.
برای بدست آوردن یک Identityکافی است که پس از درج رکورد در جدول مورد نظر متغییر سیستمی @@Identityو یا توابع Scope_Identityو یا Ident_Currentرا همانند مثال زیر Selectکنید.

USE TEMPDB
GO
IF OBJECT_ID(N'Employees', N'U') IS NOT NULL
DROP TABLE Employees1;
GO
CREATE TABLE Employees
(
ID int IDENTITY,
FirstName NVARCHAR(50),
LastName NVARCHAR(50)
)
GO
INSERT INTO Employees (FirstName,LastName) VALUES (N'مسعود',N'طاهری')
GO
SELECT @@IDENTITY AS [@@IDENTITY]
SELECT SCOPE_IDENTITY() AS [SCOPE_IDENTITY()]
SELECT IDENT_CURRENT('Employees1') AS [IDENT_CURRENT('Employees1')]
GO

 اما یکی دیگر از مباحث مهم درباره Identity تاثیر Scope بر مقدار Identity است (یعنی چه!)

چه رتبه ای می‌دهید؟

میانگین ۵ / ۵. از مجموع ۱

اولین نفر باش

title sign
دانلود مقاله
Identity چیست – قسمت دوم
فرمت PDF
9 صفحه
حجم 1 مگابایت
دانلود مقاله
دوره حضوری BI نیک آموز
هوش تجاری انبار داده
title sign
معرفی نویسنده
مسعود طاهری
مقالات
28 مقاله توسط این نویسنده
محصولات
55 دوره توسط این نویسنده
مسعود طاهری

مسعود طاهری مدرس و مشاور ارشد SQL Server & BI ،  مدیر فنی پروژه‌های هوش تجاری (بیمه سامان، اوقاف، جین وست، هلدینگ ماهان و...) ، مدرس دوره‌هــای SQL Server و هوش‌تجاری در شرکت نیک‌آموز و نویسنده کتاب PolyBase در SQL Server

پروفایل نویسنده
title sign
دیدگاه کاربران

    • سلام خسته نباشین ممنون بابت این توضیحات. من از ()ident_Current: استفاده میکنم برای ثبت نرم افزار فروشگاهی برای ثبت فیشی که از ترازو فرستاده میشه و id ایجاد شده رو باید بفرستم سمت سورس که بعضی وقت ها موقعی که دو فیش هم زمان زده میشه id رو اشتباه برمیگردونه و مثلذا دو فیش که هم زمان زده شده رو id اونی که اخر ثبت شده رو برمیگردنه و این باعث میشه id ایتم ها اشتباه ثبت بشه با توضیحات شما فک کنم اگه از ()Scope_Identity استفاده کنم مشکل دیگه حل میشه

    • فایل pdf دانلود نمیشود

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

    • فایل pdf دانلود نمیشود

      • درود بر شما

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

        با تشکر

    • سلام
      گاهی در حین درج اطلاعات شماره آی دی ستون Identity دچار یک پرش ناگهانی می شود مثلا از شماره ۱ تا ۹ را درست می رود به جای اینکه به ۱۰ برود به ۱۰۰۰ می رود علت بروز این اشکال چیست ؟

    • سلام
      گاهی در حین درج اطلاعات شماره آی دی ستون Identity دچار یک پرش ناگهانی می شود مثلا از شماره ۱ تا ۹ را درست می رود به جای اینکه به ۱۰ برود به ۱۰۰۰ می رود علت بروز این اشکال چیست ؟

    •  خوب بود و ممنون

    •  خوب بود و ممنون