Icon View Incident Report

Serious Serious
Reported By: Terry Swiers
Reported On: 10/20/2009
For: Version 2.03 Build 4
# 3089 ALTER TABLE ALTER COLUMN..MOVE Clause Can Cause Data Loss Errors When Moving Columns

If I run the following script against the database, it's dropping some of the data during the restructure due to a data conversion error.

If I modify the script to remove any field adds, drops, or moves, the alter script runs through without any problems.

SCRIPT
BEGIN

EXECUTE IMMEDIATE 'ALTER TABLE "cust"
DROP COLUMN "CCNum",
DROP COLUMN "CCType",
DROP COLUMN "CCExpDate",
DROP COLUMN "CCName",
DROP COLUMN "CCCVV2",
DROP COLUMN "CCAVAddr",
ALTER COLUMN "CustNum" AS INTEGER DEFAULT 0,
ALTER COLUMN "MasterCust" AS INTEGER DEFAULT 0,
ALTER COLUMN "GUID" AS VARCHAR(38) COLLATE "UNI" DEFAULT CURRENT_GUID,
ALTER COLUMN "Country" MOVE TO 11,
ALTER COLUMN "BillCntry" MOVE TO 17,
ALTER COLUMN "Phone2Label" AS VARCHAR(15) COLLATE "UNI" DEFAULT ''Phone 2'',
ALTER COLUMN "Phone3Label" AS VARCHAR(15) COLLATE "UNI" DEFAULT ''Phone 3'',
ALTER COLUMN "Pricing" AS SMALLINT DEFAULT 0,
ALTER COLUMN "NoDelete" AS BOOLEAN DEFAULT False,
ALTER COLUMN "BadDebt" AS BOOLEAN DEFAULT False,
ALTER COLUMN "DiscPct" AS FLOAT DEFAULT 0.00,
ALTER COLUMN "NoMail" AS BOOLEAN DEFAULT False,
ALTER COLUMN "MaxCredit" AS FLOAT DEFAULT 0.00,
ALTER COLUMN "NewInd" AS BOOLEAN DEFAULT False,
ALTER COLUMN "OnlineID" AS VARCHAR(30) COLLATE "UNI",
ALTER COLUMN "OnlinePW" AS VARCHAR(30) COLLATE "UNI",
ADD COLUMN "LastModID" VARCHAR(15) COLLATE "UNI" DEFAULT ''CREATED'' AT 51,
ALTER COLUMN "NoLateChg" AS BOOLEAN DEFAULT False,
ALTER COLUMN "OpenPhone" AS BOOLEAN DEFAULT False,
ALTER COLUMN "NameOrder" AS SMALLINT DEFAULT 0,
ALTER COLUMN "NoStmnt" AS BOOLEAN DEFAULT False,
ALTER COLUMN "StmntDest" AS SMALLINT DEFAULT 0,
ALTER COLUMN "EmailStatements" AS BOOLEAN DEFAULT False,
ALTER COLUMN "PORequired" AS BOOLEAN DEFAULT False,
ALTER COLUMN "InActive" AS BOOLEAN DEFAULT False,
ALTER COLUMN "AtrexVersion" AS INTEGER DEFAULT 0,
ALTER COLUMN "AtrexCopies" AS INTEGER DEFAULT 0,
ALTER COLUMN "AtrexCustom" AS BOOLEAN DEFAULT False,
ALTER COLUMN "AtrexCustomReports" AS BOOLEAN DEFAULT False,
ALTER COLUMN "UpdateNotices" AS BOOLEAN DEFAULT False,
ALTER COLUMN "AdditionalSerials" MOVE TO 69,
ALTER COLUMN "ResellerLink" AS INTEGER DEFAULT 0,
ALTER COLUMN "AtrexRemainingSupport" AS INTEGER DEFAULT 0,
ALTER COLUMN "ResellerStatus" AS VARCHAR(30) COLLATE "UNI",
ALTER COLUMN "ResellerExpDt" MOVE TO 77,
ALTER COLUMN "ResellerApprovedVer" AS INTEGER DEFAULT 0,
ALTER COLUMN "ResellerURL" AS VARCHAR(128) COLLATE "UNI",
ALTER COLUMN "ResellerEmail" AS VARCHAR(128) COLLATE "UNI",
ALTER COLUMN "AtrexUpgradeCredit" AS FLOAT DEFAULT 0.00,
ALTER COLUMN "NoMailReason" AS VARCHAR(50) COLLATE "UNI"

DESCRIPTION ''Customer Information''
VERSION 13
UNENCRYPTED
INDEX PAGE SIZE 8192
BLOB BLOCK SIZE 1024
PUBLISH BLOCK SIZE 1024
PUBLISH COMPRESSION 0
MAX ROW BUFFER SIZE 65536
MAX INDEX BUFFER SIZE 262144
MAX BLOB BUFFER SIZE 32768
MAX PUBLISH BUFFER SIZE 32768';

END



Comments Comments
The ALTER COLUMN MOVE clause was incorrectly resetting the altered columns old position during the alteration, causing the subsequent movement of the column data into the new version of the table to use the incorrect old column data.


Resolution Resolution
Fixed Problem on 10/22/2009 in version 2.03 build 5


Products Affected Products Affected
ElevateDB Additional Software and Utilities
ElevateDB DAC Client-Server
ElevateDB DAC Client-Server with Source
ElevateDB DAC Standard
ElevateDB DAC Standard with Source
ElevateDB DAC Trial
ElevateDB LCL Standard with Source
ElevateDB VCL Client-Server
ElevateDB VCL Client-Server with Source
ElevateDB VCL Standard
ElevateDB VCL Standard with Source
ElevateDB VCL Trial

Image