در توسینسو تدریس کنید

و

با دانش خود درآمد کسب کنید

ویژگی Temporal Table در 2016 SQL Server

ویژگی Temporal Table از Sql 2016 اضافه شده که البته دقت داشته باشید که با Temporary Table اشتباه گرفته نشود. Temporal Table که به آن System Version table هم میگویند تاریخچه رکوردها را به صورت خودکار نگهداری میکند . در واقع قبل از هر عمل ویرایش و حذف که بر روی رکوردهای این نوع جدوال انجام شود یک رکورد در جدول تاریخچه ثبت می شود ، بنابراین تمامی تغییرات رکوردها در این جدول وجود دارد درحالیکه اگر در یک ستون در یک جدول معمولی مقدار 5 را به 10 تغییر دهیم فقط آخرین مقدار را داریم یعنی عدد 10 . ولی در جدوال Temporal مقدار قبلی (که در این مثال عدد 5 میباشد)را نیز داریم .

بنابراین با استفاده از Temporal Table


  • امکان بازگرداندن رکوردها : مثلا اگر سهوا رکوردی را حذف یا ویرایش کرده باشیم یا اگر برنامه ما خطایی داشته باشد که منجر به حذف و یا ویرایش رکوردها شود به راحتی میتوانیم رکورد را به حالت قبل بازگردانیم .
  • امکان بررسی تغییرات انجام شده در جدول به راحتی قابل دسترس است .
  • نیازی به کدنویسی و یا تنظیمات خیلی خاصی برای راه اندازی آن در SQL ندارید.

شرایط ایجاد Temporal Table


  1. جدول باید حتما دارای یک Primary Key باشد .
  2. دو ستون تاریخ شروع و پایان باید تعریف شود ( البته در صورت دلخواه میتوانید این دو ستون را با استفاده از hidden flag که در ادامه نیز توضیح خواهم داد پنهان نمائید )

در ادامه یک مثال عملی را با هم بررسی می نمایئم .

در زیر یک جدول با 6 ستون ایجاد کرده ام . ستون C محاسباتی است و مقدار A*B را نگهداری میکند . همانطور که گفتم ایجاد یک Primary الزامی است برای همین ID را نیز تعریف کرده ام . ستون های StartTime , EndTime هم الزامی هستند و دقیقا باید به همین شکل تعریف شوند . به قسمتی که با کادر قرمز مشخص شده دقت کنید . این دستور تعیین کننده است که جدول Temporal تعریف شود

Temporal Table

جدول ایجاد شده به شکل زیر خواهد بود

ویژگی  Temporal Table در   2016 SQL Server

سه رکورد با مقادیر زیر در جدول درج میکنیم :

ویژگی  Temporal Table در   2016 SQL Server

. همانطور که میبنید تاریخ شروع و پایان به صورت خودکار درج میشود .حال اگر مقادیر جدول را ویرایش و حذف کنیم چه اتفاقی می افتد ؟ در کوئری زیر رکورد با شناسه 2 از جدول حذف و رکورد با شناسه 3 ویرایش شده است .

ویژگی  Temporal Table در   2016 SQL Server

پس از اجرای کوئری بالا ما انتظار داریم رکورد حذف شده و هم چنین مقدار قبلی رکورد با شناسه 3 را در جدول History داشته باشیم . اگر از جدول History دستور Select را اجرا کنیم دقیقا رکوردها به شکل زیر خواهد بود . شناسه 2 که حذف شده و شناسه 3 که مقدار A قبلی آن عدد 0 بوده است . همانطور که مشاهده می نمائید مقدار StartTime با مقدار StartTime جدول اصلی و مقدار EndTime با زمان جاری سرور (در زمان ویرایش و یا حذف ) پر شده اند .

ویژگی  Temporal Table در   2016 SQL Server

محدودیت ها


  • ستون های تاریخ شروع و پایان را به صورتی دستی نمی توانید مقدار دهی کنید ( به صورت خودکار مقدار میگیرند)
  • دیتای موجود در جدول History قایل تغییر نمیباشد .
  • جدول History شامل هیچ Constraint ای نمی تواند باشد .

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

ALTER TABLE dbo.Test SET (SYSTEM_VERSIONING = OFF);

برای مخفی کردن ستون های تاریخ در جدول اصلی میتوانید از Hidden استفاده نمایئد.

ویژگی  Temporal Table در   2016 SQL Server

#قابلیت_های_جدید_sql_سرور #temporary_table_چیست #temporal_table_چیست #امکانات_جدید_sql_سرور #نگهداری_تایخچه_اطلاعات_در_sql_2016 #temporal_table_در_sql_2016 #جدول_موقتی_در_sql_سرور_2016
4 نظر
ابوالفضل رهنما

سلام

1)بااین حساب از نوشتن تریگر و همچنین ساختن جدولی دیگر برای نگهداری لاکها راحت میشوم

2) ایا می توانیم ip و یا داده ای(کاربر جاری سیستم منظورم کاربر برنامه است نه sql)را دراین جدول نگهداری کنیم

سحر بیرامی

سلام .

۱ . بله همینطور هست کدنویسی به نظرم کمتر میشود.

۲ . راستش من هم دنبال این مطلب هستم که نام کاربر رو به شیوه ای ثبت کنم . به محض گرفتن نتیجه حتما اعلام می نمایم .

ابوالفضل رهنما

سلام

بنظرم بهتر یک ستون Ceator ایجاد کنیم که هردفعه نام کاربر ثبت کنیم

سحر بیرامی

بله ، این هم میتونه راه خوبی باشه ولی به هر حال در هنگام حذف رکورد ، کاربری که حذف رکورد رو انجام داده از دست میره (با توجه به ساختار این جدول کاربر ی که عمل قبلی رو انجام داده ثبت میشه )اما برای ویرایش رکورد مناسب هست

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

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