Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Which rows fail alter column data type
Message
 
 
À
10/09/2013 13:05:07
Information générale
Forum:
Microsoft SQL Server
Catégorie:
Syntaxe SQL
Versions des environnements
SQL Server:
SQL Server 6.5 and older
Application:
Web
Divers
Thread ID:
01582711
Message ID:
01582772
Vues:
39
Trust in Borislav ;-)

>This works perfectly and will save me amazing amounts of time.
>
>Thanks again!
>
>
>>>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-uniqueidentifier
>>
>>
>>DECLARE @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 + '}%')
>>
Précédent
Répondre
Fil
Voir

Click here to load this message in the networking platform