SQL scripts to check and migrate invalid decimal formatting in Article Attribute Values
for MASTER and SUPPLIER database
-- This script can be used after migration of a pim database older than version 5 in order to correct old formatted article attribute values.---- It searches for invalid formatted decimal values in ArticleAttributeValue.Value and ArticleAttributeValue.ValueMax-- which have only one comma and only digits in it, and replaces the comma with a dot-- f.e.: -- - "1,2" becomes "1.2"-- - "10000,23" becomes "10000.23"---- Limitations:-- Old values with thousands separator (f.e. "1.000,2") are not migrated. Also values with characters other than digits and "," (f.e. "1,2 mm") are not migrated.-- Execute the following statements once on the MASTER database and once on the SUPPLIER database.-- 1. search for invalid values (here you have the ability to recheck, if these values should be migrated)SELECT ar.Identifier, aav.ID, aav.Value, aav.ValueMaxFROM ArticleRevision arINNER JOIN ArticleAttribute aa ON aa.ArticleRevisionID = ar.IDINNER JOIN ArticleAttributeValue aav ON aa.ID = aav.ArticleAttributeIDWHERE aa.DataTypeID in (2, 3, 7) AND (((len(aav.Value) - len(replace(aav.Value, ',', ''))) = 1 AND aav.Value not like '%[^0-9,]%') OR ((len(aav.ValueMax) - len(replace(aav.ValueMax, ',', ''))) = 1 AND aav.ValueMax not like '%[^0-9,]%'))-- 2. correct invalid values in ArticleAttributeValue.ValueUPDATE ArticleAttributeValue set Value = replace (Value, ',', '.')WHERE ID in (SELECT aav.IDFROM ArticleAttribute aa INNER JOIN ArticleAttributeValue aav ON aa.ID = aav.ArticleAttributeIDWHERE aa.DataTypeID in (2, 3, 7)AND (len(aav.Value) - len(replace(aav.Value, ',', ''))) = 1 AND aav.Value not like '%[^0-9,]%')-- 2. correct invalid values in ArticleAttributeValue.ValueMaxUPDATE ArticleAttributeValue set ValueMax = replace (ValueMax, ',', '.')WHERE ID in (SELECT aav.IDFROM ArticleAttribute aa INNER JOIN ArticleAttributeValue aav ON aa.ID = aav.ArticleAttributeIDWHERE aa.DataTypeID in (2, 3, 7)AND (len(aav.ValueMax) - len(replace(aav.ValueMax, ',', ''))) = 1 AND aav.ValueMax not like '%[^0-9,]%')for MAIN database
-- This script can be used after migration of a pim database older than version 5 in order to correct old formatted structure group attribute values.---- It searches for invalid formatted decimal values in StructureGroupAttributeVal.Value and StructureGroupAttributeVal.ValueMax-- which have only one comma and only digits in it, and replaces the comma with a dot-- f.e.: -- - "1,2" becomes "1.2"-- - "10000,23" becomes "10000.23"---- Limitations:-- Old values with thousands separator (f.e. "1.000,2") are not migrated. Also values with characters other than digits and "," (f.e. "1,2 mm") are not migrated.-- Execute the following statements on the MAIN database.-- 1. search for invalid values (here you have the ability to recheck, if these values should be migrated)SELECT sgav.Identifier, sgav.ID, sgav.Value, sgav.ValueMaxFROM StructureGroupAttribute sgaINNER JOIN StructureGroupAttributeVal sgav ON sgav.StructureGroupAttributeID = sga.IDWHERE DataTypeID in (2, 3, 7) AND (((len(sgav.Value) - len(replace(sgav.Value, ',', ''))) = 1 AND sgav.Value not like '%[^0-9,]%') OR ((len(sgav.ValueMax) - len(replace(sgav.ValueMax, ',', ''))) = 1 AND sgav.ValueMax not like '%[^0-9,]%'))-- 2. correct invalid values in StructureGroupAttributeVal.ValueUPDATE StructureGroupAttributeVal set Value = replace (Value, ',', '.')WHERE ID in (SELECT sgav.IDFROM StructureGroupAttribute sgaINNER JOIN StructureGroupAttributeVal sgav ON sgav.StructureGroupAttributeID = sga.IDWHERE DataTypeID in (2, 3, 7)AND (len(sgav.Value) - len(replace(sgav.Value, ',', ''))) = 1 AND sgav.Value not like '%[^0-9,]%')-- 2. correct invalid values in StructureGroupAttributeVal.ValueMaxUPDATE StructureGroupAttributeVal set ValueMax = replace (ValueMax, ',', '.')WHERE ID in (SELECT sgav.IDFROM StructureGroupAttribute sgaINNER JOIN StructureGroupAttributeVal sgav ON sgav.StructureGroupAttributeID = sga.IDWHERE DataTypeID in (2, 3, 7)AND (len(sgav.ValueMax) - len(replace(sgav.ValueMax, ',', ''))) = 1 AND sgav.ValueMax not like '%[^0-9,]%')