Here's my latest attempt (note changed from True/False return code to returning a valid, cleaned-up, GUID, or NULL if invalid
Kristen
--
PRINT 'Create function fn_IsGUID'
GO
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[dbo].[fn_IsGUID]') AND xtype IN (N'FN', N'IF', N'TF'))
DROP FUNCTION dbo.fn_IsGUID
GO
CREATE FUNCTION dbo.fn_IsGUID
(
@strGUID varchar(8000) -- String to be tested - hyphens optional, allows surrounding {...} and trims spaces
)
RETURNS uniqueidentifier -- NULL = Bad GUID encountered, else cleanedup GUID returned
/* WITH ENCRYPTION */
AS
/*
* fn_IsGUID Check that a String is a valid GUID
*
* Returns:
*
* Valid GUID (as uniqueidentifier), or NULL if invalid
*/
BEGIN
DECLARE @uidGUID uniqueidentifier
SELECT @strGUID = LTRIM(RTRIM(REPLACE(REPLACE(@strGUID, '{', ''), '}', ''))),
@strGUID = CASE WHEN LEN(@strGUID) = 32
THEN LEFT(@strGUID, 8)
+ '-' + SUBSTRING(@strGUID, 9, 4)
+ '-' + SUBSTRING(@strGUID, 13, 4)
+ '-' + SUBSTRING(@strGUID, 17, 4)
+ '-' + SUBSTRING(@strGUID, 21, 12)
ELSE @strGUID
END,
@uidGUID = CASE WHEN @strGUID like
'[0-9A-F][0-9A-F][0-9A-F][0-9A-F][0-9A-F][0-9A-F][0-9A-F][0-9A-F]-[0-9A-F][0-9A-F][0-9A-F][0-9A-F]-[0-9A-F][0-9A-F][0-9A-F][0-9A-F]-[0-9A-F][0-9A-F][0-9A-F][0-9A-F]-[0-9A-F][0-9A-F][0-9A-F][0-9A-F][0-9A-F][0-9A-F][0-9A-F][0-9A-F][0-9A-F][0-9A-F][0-9A-F][0-9A-F]'
THEN CONVERT(uniqueidentifier, @strGUID)
ELSE NULL
END
RETURN @uidGUID
/** TEST RIG
-- Good!
SELECT dbo.fn_IsGUID('BFF14A46-19F4-4E8E-BFE1-579E7ABDA3C1')
SELECT dbo.fn_IsGUID(' BFF14A46-19F4-4E8E-BFE1-579E7ABDA3C1 ')
SELECT dbo.fn_IsGUID(' {BFF14A46-19F4-4E8E-BFE1-579E7ABDA3C1} ')
SELECT dbo.fn_IsGUID(' {BFF14A4619F44E8EBFE1579E7ABDA3C1} ')
SELECT dbo.fn_IsGUID('bff14a46-19f4-4e8e-bfe1-579e7abda3c1')
-- Bad!
SELECT dbo.fn_IsGUID('BFF14A46-19F4-4E8E-BFE1-579E7ABDA3Cx')
SELECT dbo.fn_IsGUID('BFF14A461-9F4-4E8E-BFE1-579E7ABDA3C1')
SELECT dbo.fn_IsGUID('BFF14A46-19F44-E8E-BFE1-579E7ABDA3C1')
SELECT dbo.fn_IsGUID('BFF14A46-19F4-4E8EB-FE1-579E7ABDA3C1')
SELECT dbo.fn_IsGUID('BFF14A46-19F4-4E8E-BFE15-79E7ABDA3C1')
**/
--==================== fn_IsGUID ====================--
END
GO
PRINT 'Create function fn_IsGUID DONE'
GO
--
Kristen