Djabarov, Robert
Robert.Djabarov at usaa.com
Tue Nov 18 11:54:17 CST 2003
Yeah, except if the value happens to be put into a non-uniqueidentifier variable or field, - the result will show the datatype of that variable/field, not of the value. Previously posted function resolves this issue. -----Original Message----- From: dba-sqlserver-bounces at databaseadvisors.com [mailto:dba-sqlserver-bounces at databaseadvisors.com] On Behalf Of Francisco H Tapia Sent: Friday, November 14, 2003 11:41 AM To: dba-sqlserver at databaseadvisors.com Subject: Re: [dba-SQLServer]Is the data a GUID? Here is the answer to my question, I received this on the Microsoft newsgroup (sql server programming ) > declare @s sql_variant > set @s = newid() > select sql_variant_property(@s,N'BaseType') this effectively returns the data type and that is what I can use to validate if the data is a guid or NOT. simply like the "IsNumeric" funciton. I hope this helps out someone else :) MartyConnelly wrote: > I don't know if there is anything specific beyond the fact that is a > random 16 byte binary number > and if the 13'th half byte is 4 it was generated by Microsoft (after > they stopped using the MAC address to create it), so not truly random. > There is a guid datatype in vb.dotnet maybe check that documentation. > > I suppose if you have it displayed as a hex string you could > with/without those extraneous hyphens you could use regexp to check > but how you do that in T-SQL, I dunno. > > regExp.pattern="[{][A-F0-9]{8}-[A-F0-9]{4}-[A-F0-9]{4}-[A-F0-9]{4}-[A- > F0-9]{12}[}]" > > > > > Here is an interesting article on the speed of GUIDs with SQL that > might have further info. > The Cost of GUIDs as Primary Keys > MAR 08, 2002 By Jimmy Nilsson. > > > http://www.informit.com/isapi/product_id~{E3D24CE5-F2A0-4B16-A39C-7AB1 > 7525F07C}/session_id~{DC1DFD4E-98B7-4E40-B3B5-DE36CA8F9FEF}/content/in > dex.asp > > > A GUID is a 128-bit integer. That's only 16 bytes. > So your 12 byte value would be 2 to the 96'th power or 2^96 > > One interesting bit. GUIDs are not as random as advertised. > > Listing 3: Some GUIDs Generated with SQL Server 7 on NT4 > > B3BFC6B1-05A2-11D6-9FBA-00C04FF317DF > B3BFC6B2-05A2-11D6-9FBA-00C04FF317DF > B3BFC6B3-05A2-11D6-9FBA-00C04FF317DF > B3BFC6B4-05A2-11D6-9FBA-00C04FF317DF > B3BFC6B5-05A2-11D6-9FBA-00C04FF317DF > > Listing 4: Some GUIDs Generated with SQL Server 2000 on Windows 2000 > > C87FC84A-EE47-47EE-842C-29E969AC5131 > 2A734AE4-E0EF-4D77-9F84-51A8365AC5A0 > 70E2E8DE-500E-4630-B3CB-166131D35C21 > 15ED815C-921C-4011-8667-7158982951EA > 56B3BF2D-BDB0-4AFE-A26B-C8F59C4B5103 > > "As you saw in Listing 3, only the eighth half byte is changed between > calls. On the other hand, in Listing 4, only the 13th half byte is > constant between calls. In Windows 2000, the MAC address isn't used > any longer for when GUIDs are generated. Instead, the GUID is only a > 16-byte random number. Well, that isn't totally true. The 13th half > byte is constant, so only 15.5 bytes are random. Adam Nathan at > Microsoft explained to me that the 13th half byte is the value that > will point out the source of the GUID, and 4 means Microsoft." > > > > Francisco H Tapia wrote: > >> Anybody have a TSQL test on weather the data is a GUID or not? >> thanks.... >> >> I want to test some data, I have the function for ISnumeric which >> gives back a simple 1 or 0 if data is numeric or not, but does not >> tell you if the data is a GUID (or that it qualifies as a number). >> >> Thanks, >> > -- -Francisco _______________________________________________ dba-SQLServer mailing list dba-SQLServer at databaseadvisors.com http://databaseadvisors.com/mailman/listinfo/dba-sqlserver http://www.databaseadvisors.com