Auto Generating Unique Key In Sql Table
This article demonstrates how to “roll your own” surrogate keys and sequences in a platform-independent way, using standard SQL.
Feb 23, 2010 The key to generating large number of random and unique alpha numeric code is to generate all of it in one go. Store all the codes in a file or a table and server the requested amount of codes whenever required from there. The SQL script below will generate 10 digit or rather 10 character. Primary Key Generation Using Oracle's Sequence. Oracle provides the sequence utility to automatically generate unique primary keys. To use this utility to auto-generate primary keys for a CMP entity bean, you must create a sequence table and use the @AutomaticKeyGeneration annotation to point to this table. Oct 11, 2017 PowerApps could take use of the SQL Server table as the data source, or the SharePoint list, both of them contains feature to generate Auto-Increment-ID. Like SQL table Primary Key, or the SharePoint List ID field, which can't be modified by users.
Surrogate keys
Relational theory talks about something called a “candidate key.” In SQL terms, a candidate key is any combination of columns that uniquely identifies a row (SQL and the relational model aren’t the same thing, but I’ll put that aside for this article). The data’s primary key is the minimal candidate key. Many people think a primary key is something the DBA defines, but that’s not true. The primary key is a property of the data, not the table that holds the data.
Unfortunately, the minimal candidate key is sometimes not a good primary key in the real world. For example, if the primary key is 6 columns wide and I need to refer to a row from another table, it’s impractical to make a 6-column wide foreign key. For this reason, database designers sometimes introduce a surrogate key, which uniquely identifies every row in the table and is “more minimal” than the inherently unique aspect of the data. The usual choice is a monotonically increasing integer, which is small and easy to use in foreign keys.
Every RDBMS of which I’m aware offers a feature to make surrogate keys easier by automatically generating the next larger value upon insert. In SQL Server, it’s called an IDENTITY
column. In MySQL, it’s called AUTO_INCREMENT
. It’s possible to generate the value in SQL, but it’s easier and generally safer to let the RDBMS do it instead. This does lead to some issues itself, such as the need to find out the value that was generated by the last insertion, but those are usually not hard to solve (LAST_INSERT_ID()
and similar functions, for example).
It’s sometimes desirable not to use the provided feature. For instance, I might want to be sure I always use the next available number. In that case, I can’t use the built-in features, because they don’t generate the next available number under some circumstances. For example, SQL Server doesn’t decrement the internal counter when transactions are rolled back, leaving holes in the data (see my article on finding missing numbers in a sequence). Neither MySQL nor SQL Server decrements the counter when rows are deleted.
In these cases, it’s possible to generate the next value in the insert statement. Suppose my table looks like this:
The next value for c1
is simply the maximum value + 1. If there is no maximum value, it is 1, which is the same as 0 + 1.
There are platform-dependent ways to write that statement as well, such as using SQL Server’s ISNULL
function or MySQL’s IFNULL
. This code can be combined into an INSERT
statement, such as the following statement to insert 3 into the second column:
The code above is a single atomic statement and will prevent any two concurrent inserts from getting the same value for c1
. It is not safe to find the next value in one statement and use it in another, unless both statements are in a transaction. I would consider that a bad idea, though. There’s no need for a transaction in the statement above.
Downsides to this approach are inability to find the value of c1
immediately after inserting, and inability to insert multiple rows at once. The first problem is inherently caused by inserting meaningless data, and is always a problem, even with the built-in surrogate keys where the RDBMS provides a mechanism to retrieve the value.
Sequences: a better surrogate key
Surrogate keys are often considered very bad practice, for a variety of good reasons I won’t discuss here. Sometimes, though, there is just nothing for it but to artificially unique-ify the data. In these cases, a sequence number can often be a less evil approach. A sequence is just a surrogate key that restarts at 1 for each group of related records. For example, consider a table of log entries related to records in my t1
table:
Sql Unique Key Syntax
At this point I might want to enter some more records (0, 11) into t1
:
Now suppose I want the following three log entries for the first row in t1
:
There’s no good primary key in this data. I will have to add a surrogate key. It might seem I could add a date-time column instead, but that’s a dangerous design. It breaks as soon as two records are inserted within a timespan less than the maximum resolution of the data type. It also breaks if two records are inserted in a single transaction where the time is consistent from the first to the last statement. I’m much happier with a sequence column. The following statement will insert the log records as desired:
If I want to enter a log record on another record in t1
, the sequence will start at 1 for it:
MySQL actually allows an AUTO_INCREMENT
value to serve as a sequence for certain table types (MyISAM and BDB). To do tihs, just make the column the last column in a multi-column primary key. I’m not aware of any other RDBMS that does this.
Re: How To Auto Increment Alphanumeric Primary Key In sql server 2008
Jul 12, 2013 12:52 AMRagavanBLINK
Hi Manish,
try like this sample,
Personal detail:
create table personaldetail(id bigint identity primary key,pid nvarchar(20) unique,name nvarchar(25),addres nvarchar(100))
Occupation:
create table occupation(id bigint identity primary key,pid nvarchar(20) references personaldetail(pid),occupation nvarchar(25),dept nvarchar(25))
Jun 11, 2013 Empire earth 2 Art of Supremacy. Serial Keys are: GED2-RYJ6-XAN2-BYM7-6872 PUF4-DUX2-LUR4-GUX8-3429 NEF4-SUX6-XYZ8-SEB2-6228 PYJ8-SUN6-CYD2-NUX9-8989 TES2-NEM2-CYJ5-JAT7-3425 Contact Info. Empire earth key code generator.
then generate the pid at code behind like,
public string generate_ID(){
int id=0;
string pid;
Serial key for Deer Hunter Tournament N/A can be found and viewed here. We have the largest serial numbers data base. KeyGenNinja.com (former KeygenGuru) KEYGENNINJA.COM IS THE BEST WAY TO FIND CRACKS, SERIAL NUMBERS, KEYGENs: Forum moderators are required!!! Deer Hunter Tournament N/A. Many downloads like Deer Hunter Tournament may also include a crack, serial number, unlock code, cd key or keygen (key generator). If this is the case it. Product key generator for games. Deer Hunter Tournament N/A Serial Number Keygen for All Versions Find Serial Number notice: Deer Hunter Tournament serial number, Deer Hunter Tournament all version keygen, Deer Hunter Tournament activation key, crack - may give false results or no results in search terms. Many downloads like Deer Hunter Tournament CD Key may also include a crack, serial number, unlock code, cd key or keygen (key generator). If this is the case it is usually found in the full download archive itself.
string pidquery = 'select top 1 SUBSTRING(pid,4,len(piid))as pid from personal detail order by pid desc';
// here 4 char denotes number after prefix string('HUA')
SqlCommand scmd = new SqlCommand(pidquery, con);
SqlDataAdapter adapter = new SqlDataAdapter(pidquery, con);
DataTable restable = new DataTable();
adapter.Fill(restable);
if (restable.Rows.Count > 0)
{
SqlDataReader reader = scmd.ExecuteReader();
reader.Read();
id= Convert.ToInt32(reader['pid']);
id= id+ 1;
pid = 'HUA' + Convert.ToString(id);
}
else // its for if no data in db
{
id= 1;
pid = 'HUA' + Convert.ToString(jid);
}
return pid;
}
Unique Primary Key Sql
after got id:
insert into both tables like:
1. insert into personaldetail('+pid+','+name+','+addr+')
2.insert into occupation('+pid+','+occupation+','+dept+')
please let me know the status.
Thank you,