ویژگی Temporal Table از Sql 2016 اضافه شده که البته دقت داشته باشید که با Temporary Table اشتباه گرفته نشود. Temporal Table که به آن System Version table هم میگویند تاریخچه رکوردها را به صورت خودکار نگهداری میکند . در واقع قبل از هر عمل ویرایش و حذف که بر روی رکوردهای این نوع جدوال انجام شود یک رکورد در جدول تاریخچه ثبت می شود ، بنابراین تمامی تغییرات رکوردها در این جدول وجود دارد درحالیکه اگر در یک ستون در یک جدول معمولی مقدار 5 را به 10 تغییر دهیم فقط آخرین مقدار را داریم یعنی عدد 10 . ولی در جدوال Temporal مقدار قبلی (که در این مثال عدد 5 میباشد)را نیز داریم .
در ادامه یک مثال عملی را با هم بررسی می نمایئم . در زیر یک جدول با 6 ستون ایجاد کرده ام . ستون C محاسباتی است و مقدار A*B را نگهداری میکند . همانطور که گفتم ایجاد یک Primary الزامی است برای همین ID را نیز تعریف کرده ام . ستون های StartTime , EndTime هم الزامی هستند و دقیقا باید به همین شکل تعریف شوند . به قسمتی که با کادر قرمز مشخص شده دقت کنید . این دستور تعیین کننده است که جدول Temporal تعریف شود
جدول ایجاد شده به شکل زیر خواهد بود
سه رکورد با مقادیر زیر در جدول درج میکنیم :
. همانطور که میبنید تاریخ شروع و پایان به صورت خودکار درج میشود .حال اگر مقادیر جدول را ویرایش و حذف کنیم چه اتفاقی می افتد ؟ در کوئری زیر رکورد با شناسه 2 از جدول حذف و رکورد با شناسه 3 ویرایش شده است .
پس از اجرای کوئری بالا ما انتظار داریم رکورد حذف شده و هم چنین مقدار قبلی رکورد با شناسه 3 را در جدول History داشته باشیم . اگر از جدول History دستور Select را اجرا کنیم دقیقا رکوردها به شکل زیر خواهد بود . شناسه 2 که حذف شده و شناسه 3 که مقدار A قبلی آن عدد 0 بوده است . همانطور که مشاهده می نمائید مقدار StartTime با مقدار StartTime جدول اصلی و مقدار EndTime با زمان جاری سرور (در زمان ویرایش و یا حذف ) پر شده اند .
دقت داشته باشید برای حذف این جدوال ابتدا باید دستور زیر را ایجاد کنید در غیر این صورت در هنگام حذف جدول با خطا مواجه میشوید .
ALTER TABLE dbo.Test SET (SYSTEM_VERSIONING = OFF);
برای مخفی کردن ستون های تاریخ در جدول اصلی میتوانید از Hidden استفاده نمایئد.
زمان پاسخ گویی روز های شنبه الی چهارشنبه ساعت 9 الی 18
فقط به موضوعات مربوط به محصولات آموزشی و فروش پاسخ داده می شود