PDA

View Full Version : مهر زمان



azita1378
چهارشنبه 24 شهریور 1389, 16:12 عصر
می شه در مورد timestamp توضیح بدید و بگید کاربردش کجاست ؟

بهزادصادقی
چهارشنبه 24 شهریور 1389, 22:04 عصر
مهم ترین مطلبی که باید در مورد timestamp بدانید این است که دیگر نباید هرگز از آن استفاده کنید. مایکروسافت اعلام کرده است که در نسخه های آینده SQL Server این data type را از محصول خواهد کشید بیرون و از همه در خواست کرده که شروع کنند به بازنویسی کدها خود و به جای timestamp از rowversion استفاده نمایند:

rowversion (Transact-SQL) in SQL Server 2008 R2 (http://msdn.microsoft.com/en-us/library/ms182776.aspx)

حقیقت این است که rowversion در حقیقت اسم دیگری است برای timestamp. یعنی این دو مفهوم کاملا یکسان هستد، و در حقیقت دو اسم هستند برای یک چیز. ولی وازه timestamp همیشه این ایده را می رساند که این نوع ستون ها ربطی با تاریخ یا زمان دارند و یا حاوی اطلاعات زمانی هستند. ولی این طور نیست. شاید هم به خاطر این است که مایکروسافت تصمیم گرفته از اسم timestamp دیگر استفاده نکند.

لینک بالا اطلاعات جامع ای در مورد rowversion می دهد. اگر در خواندن یا ترجمه اش به مشکلی برخورد کردید، در خدمت خواهیم بود.

به طور خلاصه، اگر من بخواهم بدانم که در یک جدول خاص، هز یک از سطرهای جدولم از آخرین زمانی که خواندمشان تغییری تو شان ایجاد شده یا نه، می توانم یک ستون از نوع rowversion را به جدولم اضافه کنم. هر وقت SQL Server داده های یک سطر را عوض می کند، یک مقدار جدید را به آن ستون خواهد داد.

فرض کنید من ساعت 2 و نیم بعد از ظهر یک query اجرا می کنم که سیصد هزار سطر باز میگرداند. فردا، من دوباره همان query را اجرا می کنم. آن هم سیصد هزار سطر باز می گرداند. آیا این سطر ها همان سطرهای دیروزی است؟ من از کجا بدانم کدام سطرها تغییر کرده اند.

کاری که می توانم بکنم این است که یک ستون از نوع rowversion به جدول خود اضافه کنم. اولین باری که query خود را اجرا می کنم، id هر سطر و محتویات ستون rowversion آن را جایی خیره میکنم. دفعه بعد که query خود را اجرا می کنم، می توانم ستون rowversion هر سطر مجموعه نتایج خویش را مقایسه کنم با rowversion ای که ذخیره کرده بودم. اگر یکسان بودند، یعنی آن سطر تغییر نکرده، در غیر این صورت میدانم که حداقل یکی از ستون های آن سطر تغییر کرده.