>I have many many column that are char(36) imported from VFP that have been constructed to be cast as UID.
>
>For the most part they convert fine when I
>
>ALTER TABLE tblname
>ALTER COLUMN colname Uniqueidentifier
>GO
>
>However on the four or five that fail, all I get is
>
>Conversion failed when converting from a character string to uniqueidentifier.
>
>but there are half a million rows, so I don't know where my upsizer is failing to catch a badly formed GUID(36)
>
>Is there a tsql syntax that would be something like (forgive the bad pseudocode but you get the idea)
>
>SELECT success = CAST(cid as Uniqueidentifier) from ACCOUNT_CREDITS where success = false
>
>I need to know which row it chokes on. Could probably write an iteration but seems there must be a set based way to do this.
>
>TIA
http://stackoverflow.com/questions/4649317/how-to-check-if-a-string-is-a-uniqueidentifierDECLARE @Test TABLE (Cid char(36))
INSERT INTO @test VALUES ('63F4B1CD-80DD-4F96-B5EF-520A4FDADA63')
INSERT INTO @test VALUES ('63F4B1CD-80DD-4F96-B5EF-520A4FDADA63')
INSERT INTO @test VALUES ('63F4B1CD-80DD-4F96-B5EF-520A4FDADA63')
INSERT INTO @test VALUES ('63F4B1CD-80DD-4F96-B5EF-520A4FDADA63')
INSERT INTO @test VALUES ('63F4B1CD-80DD-4F96-B5EF-520A4FDADA63')
INSERT INTO @test VALUES ('63F4B1CD-80DD-4F96-B5EF-520A4FDADA63')
INSERT INTO @test VALUES ('63F4B1CD-80DD-4F96-B5EF-520A4FDADA63')
INSERT INTO @test VALUES ('63F4B1CD-80DD-4F96-B5EF-520A4FDADA63')
INSERT INTO @test VALUES ('adfasdfadfasdfasdfasdfas')
INSERT INTO @test VALUES ('63F4B1CD-80DD-4F96-B5EF-520A4FDADA63')
SELECT CASE
WHEN NOT (Cid LIKE expression + '%' OR Cid LIKE '{' + expression + '}%') THEN Cid
END
FROM @test T
CROSS APPLY (SELECT REPLACE('00000000-0000-0000-0000-000000000000', '0', '[0-9a-fA-F]') COLLATE Latin1_General_BIN) C2(expression)
WHERE NOT (Cid LIKE expression + '%' OR Cid LIKE '{' + expression + '}%')
Against Stupidity the Gods themselves Contend in Vain - Johann Christoph Friedrich von Schiller
The only thing normal about database guys is their tables.