درخواست های ارتباط
جستجو
    لیست دوستان من
    صندوق پیام
    همه را دیدم
    • در حال دریافت لیست پیام ها
    صندوق پیام
    رویدادها
    همه را دیدم
    • در حال دریافت لیست رویدادها
    همه رویدادهای من
    تخفیف های وب سایت
    همه تخفیف ها

    عضویت در

    کانال تلگرام

    توسینسو

    اطلاعات مطلب
      مدرس/نویسنده
      سحر بیرامی
      امتیاز: 671
      رتبه:357
      0
      3
      1
      11

      ویدیوهای پیشنهادی

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

      تاریخ 16 ماه قبل
      نظرات 4
      بازدیدها 177
      ویژگی 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

      برچسب ها
      مطالب مرتبط

      در حال دریافت اطلاعات

      نظرات
      • سلام
        1)بااین حساب از نوشتن تریگر و همچنین ساختن جدولی دیگر برای نگهداری لاکها راحت میشوم
        2) ایا می توانیم ip و یا داده ای(کاربر جاری سیستم منظورم کاربر برنامه است نه sql)را دراین جدول نگهداری کنیم
      • سلام .
        ۱ . بله همینطور هست کدنویسی به نظرم کمتر میشود.
        ۲ . راستش من هم دنبال این مطلب هستم که نام کاربر رو به شیوه ای ثبت کنم . به محض گرفتن نتیجه حتما اعلام می نمایم .
      • سلام
        بنظرم بهتر یک ستون Ceator ایجاد کنیم که هردفعه نام کاربر ثبت کنیم
      • بله ، این هم میتونه راه خوبی باشه ولی به هر حال در هنگام حذف رکورد ، کاربری که حذف رکورد رو انجام داده از دست میره (با توجه به ساختار این جدول کاربر ی که عمل قبلی رو انجام داده ثبت میشه )اما برای ویرایش رکورد مناسب هست

      برای ارسال نظر ابتدا به سایت وارد شوید