به دست اوردن اخرین ایدی در جدول
همیشه برای به دست اوردن ایدی اخرین رکورد استرس دارم :متفکر: که اشتباهی رخ بده هرچند تا حالا به مشکل نخوردم ولی در کل میخوام بدونم به
@@IDENTITY و SCOPE_IDENTITY چقدر میشه اطمینان کرد یا گرفتن یک سلکت از مکس ایدی .
مثلا من یک پراسیژر دارم که درج انجام میده و همزمان با درج یک تریگر اجرا میشود که در جدول دیگری درج انجام میده و درج در این جداول در لحظه ممکن مثلا 300 رکورد باشه !
اگر اطلاعاتی در این مورد دارید ممنون میشم پست بگذارید
نقل قول: به دست اوردن اخرین ایدی در جدول
نقل قول: به دست اوردن اخرین ایدی در جدول
به این لینک یه نگاه بنداز
https://docs.microsoft.com/en-us/sql...ql-server-2017
به پاراگرافی که با این جمله شروع میشه دقت کن
Be cautious about using IDENT_CURRENT
نقل قول: به دست اوردن اخرین ایدی در جدول
البته خودمم دوست دارم دوستان نظراتشون رو بدند.
مثلا توضیحی که در Documentationهای SQL اومده اینطور میگهDENT_CURRENT is not limited by scope and session
هر برنامه ای که به SQL متصل میشه SQL یک Session براش میسازه که مخصوص همون Connection هستش. حالا توضیح بالا میگه براش Session مهم نیست و این شاید همون نگرانی شما باشه. چون ممکن بنابه دلایلی نتیجه Insert یکی کاربر دیگه رو به شما برگردونه. ولی SCOPE_IDENTITY و @@IDENTITY مقدار Insert شده در Sessionجاری رو برمیگردونه. این Session جاری همون Sessionی هستش که SQL برای اتصال برنامه شما تولید کرده. اما یک مورد هم داریم به نام Scope که باز هم کار رو دقیقتر میکنه که از بین سه گزینه بالا تنها Scope_Identity میتونه اون رو مد نظر قرار بده.
به متن زیر از لینک زیر توجه کنhttps://docs.microsoft.com/en-us/sql...ql-server-2017
For example, there are two tables, T1 and T2, and an INSERT trigger is defined on T1. When a row is inserted to T1, the trigger fires and inserts a row in T2. This scenario illustrates two scopes: the insert on T1, and the insert on T2 by the trigger.
Assuming that both T1 and T2 have identity columns, @@IDENTITY and SCOPE_IDENTITY return different values at the end of an INSERT statement on T1. @@IDENTITY returns the last identity column value inserted across any scope in the current session. This is the value inserted in T2. SCOPE_IDENTITY() returns the IDENTITY value inserted in T1. This was the last insert that occurred in the same scope. The SCOPE_IDENTITY() function returns the null value if the function is invoked before any INSERT statements into an identity column occur in the scope.
اگه دوستان که دانش دقیقتری دارند و این مسئله رو روشنتر کنند ممنون میشم