بدست آوردن عدد بعدی تولید شده برای ستون ID در SQL

با سلام.

گاهی نیاز است که ما بتونیم تا عدد بعدی ستون ID رو که PrimaryKey کردیم و به صورت اتوماتیک زیاد میشه بخونیم.

اگر Table ما خالی نباشه که به راحتی میشه با LINQ این کار رو انجام داد

public int GetLastNewsID() {     return TableNames.Select(q => q.id).Max(); }

 

اما اگر Table ما خالی باشه تابع بالا Exception میده و کار خراب میشه. برای اینکه هیچ وقت با Exception مواجه نشیم باید از T-SQL استفاده کنیم. خوب من تابع مورد نیاز برای این کار رو براتون نوشتم که امیدوارم به دردتون بخوره.

Create FUNCTION [dbo].[GetLastNewsID](@TableName NVARCHAR(50)) RETURNS int AS BEGIN     RETURN(SELECT IDENT_CURRENT (@TableNameAS Current_Identity); END

حالا اگر بخواهیم از خود LINQ استفاده کنیم تابع زیر کار ما رو راه می اندازه:

public int GetLastID(string tableName) { const string command = @"SELECT IDENT_CURRENT ({0}) AS Current_Identity;"; var id = EntityModel.ExecuteStoreQuery(command, tableName).First(); return Convert.ToInt32(id); }


کلمات کلیدی :
next automatically incrementing primary key

منبع StackSverFlow

/ 5 نظر / 111 بازدید
محمد صاحب

ممنون از این روش هم میشه استفاده کرد if(TableNames.Any()) { return TableNames.Select(q => q.id).Max(); } else { return 1; }

محمد صاحب

دقیقا حق با شماست فقط یه نکته معمولا در این مواقع و بعد خالی کردنجدول میان اون رو Reseed میکنن. خوشحال میشم سناریوی شما رو برای داشتن آخرین ردیف اضافه شده بدونم؟( بعد از خالی کردن جدول)

ASP.NET developer

برای استفاده از این اسکریپت می باید نام ستون مورد نظر رو هم بعد از نام جدول ذکر کنید و تنها نام جدول کافی نیست SELECT IDENT_CURRENT ('TableName.IdentityColumnName') AS Current_Identity; برای اطلاعات بیشتر رجوع کنید به http://msdn.microsoft.com/en-us/library/hh205279%28v=vs.110%29.aspx

mesam

گفته بودم چو بیایی غم دل با تو بگویم چه بگویم که غم از دل برود چون تو بیایی [گل]