PDA

View Full Version : به دست اوردن سطر اخر



farhadyoosefi
پنج شنبه 10 اسفند 1385, 08:14 صبح
سلام
چوری می تونم اخرین سطر table رو به دست بیارم؟سطری که تازه insert شده

AminSobati
پنج شنبه 10 اسفند 1385, 09:34 صبح
دوست عزیزم،
میتونین یک فیلد DateTime با مقدار پیش فرض GetDate بگیرید تا از طریق Max روی این فیلد، جدیدترین رکورد بدست بیاد. شاید بعضیها Max روی فیلد Identity رو پیشنهاد کنند، ولی شما میتونین با فعال کردن Identity_Insert، یک مقدار Identity کمتر از آخرین مقدار تولید شده خودتون Insert کنین، لذا Identity میتونه مقدارش صحیح نباشه

AminSobati
پنج شنبه 10 اسفند 1385, 09:49 صبح
اگر تو جدولتون یه فیلد identity دارید، از query زیر می تونید استفاده کنید:


select *
from Table
where ID_Field = (select max(ID_Field)
from Table)

فکر کنم پست من رو اصلا نخوندین ;)

zerobit-ltd
پنج شنبه 10 اسفند 1385, 09:53 صبح
فکر کنم پست من رو اصلا نخوندین ;)
من صفحه ام رو refrsh نکرده بودم.

farhadyoosefi
پنج شنبه 10 اسفند 1385, 10:07 صبح
ممنون بله یه ه فیلدidentity
داره ولی اگه نداشت چطوری می تونم این کار رو بکنم؟
چون یه جدول دیگه دارم که فیلدidentity
نداره

DonetKarvb
پنج شنبه 10 اسفند 1385, 10:27 صبح
دوست عزیزم،
میتونین یک فیلد DateTime با مقدار پیش فرض GetDate بگیرید تا از طریق Max روی این فیلد، جدیدترین رکورد بدست بیاد. شاید بعضیها Max روی فیلد Identity رو پیشنهاد کنند، ولی شما میتونین با فعال کردن Identity_Insert، یک مقدار Identity کمتر از آخرین مقدار تولید شده خودتون Insert کنین، لذا Identity میتونه مقدارش صحیح نباشه
با سلام
آیا میشه از timeStamp هم استفاده کرد؟

AminSobati
پنج شنبه 10 اسفند 1385, 10:34 صبح
با سلام
آیا میشه از timeStamp هم استفاده کرد؟
زمانی که یک رکورد Update میشه، فیلد TimeStamp هم به روز میشه، پس اگر منظورتون اینه که ازش Max بگیرید، میتونه نتیجش اشتباه باشه، یعنی آخرین رکوردی که Update شده رو برگردونه

AminSobati
پنج شنبه 10 اسفند 1385, 10:35 صبح
ممنون بله یه ه فیلدidentity
داره ولی اگه نداشت چطوری می تونم این کار رو بکنم؟
چون یه جدول دیگه دارم که فیلدidentity
نداره

عرض کردم! Identity رو توصیه نمیکنم، DateTime مطمئن تره

farhadyoosefi
پنج شنبه 10 اسفند 1385, 12:01 عصر
میشه DateTime با کد توضیح بدید

zerobit-ltd
پنج شنبه 10 اسفند 1385, 12:16 عصر
نقل قول:
نوشته شده توسط zerobit-ltd http://www.barnamenevis.org/forum/images/buttons/viewpost.gif (http://barnamenevis.org/forum/showthread.php?p=313860#post313860)
اگر تو جدولتون یه فیلد identity دارید، از query زیر می تونید استفاده کنید:
کد:
select *
from Table
where ID_Field = (select max(ID_Field)
from Table)


فکر کنم پست من رو اصلا نخوندین ;)

2 کاربر از AminSobati بخاطر این مطلب مفید تشکر کرده اند: DonetKarvb (http://barnamenevis.org/forum/member.php?u=32166) (پنجشنبه 10 اسفند 1385), farhadyoosefi (http://barnamenevis.org/forum/member.php?u=18343) (پنجشنبه 10 اسفند 1385)
تشکر بابت چی ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ ؟؟؟؟؟؟؟؟؟؟؟؟؟

AminSobati
پنج شنبه 10 اسفند 1385, 13:41 عصر
میشه DateTime با کد توضیح بدید



CREATE TABLE T1(
C1 INT PRIMARY KEY,
C2 INT,
C3 DATETIME DEFAULT GETDATE())

این روش هم مثل روش Identity یک مساله داره، اگر دو دستور INSERT کاملا پشت سر هم در یک Script اجرا بشن، ممکنه تاریخ درجشون حتی تا حد Millisecond یکسان بشه. البته به نظرم مشکل Identity در بعضی شرایط خیلی حاد باشه، مثلا وقتی دیتابیس تحت Replication قرار بگیره، به خاطر احتمال زیاد استفاده از Identity_Insert، واقعا نمیشه به بزرگترین Identity اعتماد کرد. ولی در روش DateTime، حداقل شما میدونین که اگرچه ممکنه دو رکورد از نظر تاریخ ثبت عینا مثل هم باشند اما اختلاف زمانیشون اونقدر کم هست که شاید در منطق کار شما خللی ایجاد نکنه و انتخاب یکی از بین این دو، مشکل ساز نباشه (مثلا SELECT TOP 1 بزنیم).

AminSobati
پنج شنبه 10 اسفند 1385, 14:00 عصر
یک نکته ای رو متوجه شدم:



select @@identity,scope_identity()

خوشبختانه زمانی که Identity_Insert فعال باشه، باز هم دستور بالا قابل استفاده هستش، یعنی Identity رو الزاما نباید سیستم تولید کرده باشه. پس اگر جدولی Identity داره مشکلی نیست!