Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SQL Server unique GUID

I understand in SQL Server GUIDs are MOSTLY unique, and also that the likelihood of a collision is remote, yet at the same time someone must win the lottery so I feel like it makes some sense to prepare for the possibility.

Which is faster/better practice

Using a technique where I assign a new GUID directly by just inserting a row and checking for an error (@@ERROR <> 0) and repeating until I don't get an error [which I suppose in theory would only at worst be once...]

or using an approach like this

DECLARE @MyGUID uniqueidentifier
SELECT @MyGUID = NewID()
if exists(select * from tablename where UserID=@MyGUID)

and looping over that till I find one not in use.

I like the 2nd approach because I can then have the GUID for use later on in the Stored Procedure so I'm currently leaning towards that one.

like image 389
Jordan Avatar asked May 10 '11 20:05

Jordan


People also ask

How do I create a new GUID in SQL Server?

SQL Server NEWID to Generate GUID Let's create a variable of uniqueidentifier data type. Type the below code in SSMS and execute. DECLARE @guid uniqueidentifier = NEWID(); SELECT @guid as 'GUID'; Here we created a variable named guid of data type uniqueidentifier.

What is GUID type in SQL Server?

The globally unique identifier (GUID) data type in SQL Server is represented by the uniqueidentifier data type, which stores a 16-byte binary value. A GUID is a binary number, and its main use is as an identifier that must be unique in a network that has many computers at many sites.

How do I find the GUID in SQL Server?

DECLARE @searchValue uniqueidentifier = 'a2843a1e-6ed4-4045-a179-51f0743943b8' DECLARE @sql NVARCHAR(MAX); WITH cte_sql_queries(sql_query) AS ( SELECT 'SELECT ''' + QUOTENAME(t. TABLE_SCHEMA) + ''' schema_name ' + ' , ''' + QUOTENAME(t. TABLE_NAME) + ''' table_name ' + ' , ''' + QUOTENAME(c.

How do I query unique identifier in SQL?

You can insert or save unique identifier value using . NET C# code, or you can do it with SQL Server query using newId() or newsequentialid() functions and it is guaranteed to be unique throughout the world.


1 Answers

If you have at least one network adapter in your computer, then your GUIDs will be unique. IF you don't have, then the possibility of colliding with a guid generated on another machine exists in theory, but is never ever going to happen to you. Writing code to guard against duplicate guids is a total waste of time.

That being said, to enforce uniqueness of anything in a relational database is done by only one means: create a unique constraint on the data:

ALTER TABLE tablename ADD CONSTRAINT uniqueUSerID UNIQUE UserID;
like image 153
Remus Rusanu Avatar answered Nov 22 '22 07:11

Remus Rusanu