/*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--* * DESCRIPTION: This Transact SQL script File is an initial attempt to tackle the the data transformation task required by the 'Online Directories' project. This script will attempt to convert the flat table format (containing data from 'Citel' Telemarketers) o the EZYSHOP database schema * LOCATION: NTWSYD018 h:\DataTransform\IntoEzyShop.sql, NTWSYD018 c:\IntoEzyShop.sql (Backup) * WRITTEN: July 12, 2000 --> * LAST MODIFIED: July 18, 2000 * PROGRAMMER: Matthew Bishop (matthewb@isiscenter.com) * PROJECT SUPERVISOR: James Ward (james@forwardmedia.com.au) * NOTES: a)The script should check that the data being transformed into EzyStore has the correct format. That is that character strings do not exceed limits etc. Maybe this will be handled by a seperate Script b)The script should also check for duplication of data. Particularly the duplication of companies. * STEPS IN TRANSFORMATION The following sets out the sequential steps that are taken to transform the data from the flat table into the EzyStore Database Schema A. Insert Company Name B. Translate StateName to Region_id C. Insert the Business Address Details in tblAddress D. Insert the Business Address/ Company Link details in tblCompanyAddress E. Insert the Business Address Phone Details in tblPhone and tblPhonesType F. Insert the Business Address/ Business Phone Link info into tblPhoneRelative G. Insert the Business Address Fax Details into tblPhone and tblPhonesType H. Insert Business Address/ Business Fax Link Info into tblPhoneRelative I. Insert the Postal Address Details in tblAddress J. Insert the Postal Address/ Company Link details in tblCompanyAddress K. Insert the Postal Address Phone Details in tblPhone and tblPhonesType L. Insert the Postal Address/ Business Phone Link info into tblPhoneRelative M. Insert the Postal Address Fax Details into tblPhone and tblPhonesType N. Insert Postal Address/ Business Fax Link Info into tblPhoneRelative O. Insert the Billing Address Details in tblAddress P. Insert the Billing Address/ Company Link details in tblCompanyAddress Q. Insert the Billing Address Phone Details in tblPhone and tblPhonesType R. Insert the Billing Address/ Business Phone Link info into tblPhoneRelative S. Insert the Billing Address Fax Details into tblPhone and tblPhonesType T. Insert Billing Address/ Business Fax Link Info into tblPhoneRelative --*--*--*--*--*--*--*--*--*--*--*--*--**--*--*--*--*--*--*--**/ Use EzyStoreDB /* */ go IF ((SELECT COUNT(*) FROM sysobjects WHERE name = 'procTransformCleanFlatIntoEzy' AND type = 'P') > 0) BEGIN DROP PROCEDURE procTransformCleanFlatIntoEzy END go Use EzyStoreDB go CREATE PROCEDURE procTransformCleanFlatIntoEzy AS BEGIN -->-->-->-->-->-->-->-->-->-->-->-->-->>-->-->-->-->-->-->-->-->--> SET NOCOUNT ON Declare @ErrorMessageString varchar(255), -- Used to concatenate error messages for logging @fDebug varchar(10), -- Used to turn debugging mode on or off @CurrentCompanyId int, -- From 'tblCompany.Company_id' @CurrentAddressId int, -- From 'tblAddress.Address_id' IDENTITY insert @CurrentCountryId int, -- From the v_country_list view @CurrentRegionId int, -- For Converting from State name to Region Id Number @CurrentPhoneId int, -- From 'tblPhone.Phone_id' IDENTITY insert @CurrentPhoneZone int, -- a Zone Identification based on the Phone No. Area Code @id int, @SmeIdNumber varchar (20), @BusinessName varchar (100), @DateEntered datetime, @CurrentEmailAddress varchar (255), @CurrentUrl varchar (255), @EstablishedSince varchar (4), @AppointmentsRequired bit, @Retail char (2), @WholeSale char (2), @HomeDelivery char (2), @FreeQuotes char (2), @ProprietorSalutation varchar (20), @BusinessBaseCategory int, @ProprietorName varchar (50), @ProprietorSurname varchar (50), @Mobile varchar (20), @BusinessAddressStreet1 varchar (255), @BusinessAddressStreet2 varchar (255), @BusinessAddressSuburb varchar (50), @BusinessAddressState varchar (10), @BusinessAddressCity varchar (50), @BusinessAddressPostCode varchar (10), @BusinessAddressPhoneAreaCode varchar (10), @BusinessAddressPhone varchar (20), @BusinessAddressFaxAreaCode varchar (10), @BusinessAddressFax varchar (20), @BusinessAddressCountry varchar (50), @PostalAddressStreet1 varchar (255), @PostalAddressStreet2 varchar (255), @PostalAddressSuburb varchar (50), @PostalAddressState varchar (10), @PostalAddressCity varchar (50), @PostalAddressPostCode varchar (10), @PostalAddressCountry varchar (50), @Association1 int, @Association2 int, @Association3 int, @Association4 int, @PaymentType char (10), @AmericanExpress char (2), @Visa char (2), @Mastercard char (2), @DinersClub char (2), @Bankcard char (2), @CardName varchar (50), @CardType int, @CardNumber varchar (50), @CardExpiry char (5), @Eftpos char (10), @Cheque char (10), @ABN varchar (50), @LicenseNumber varchar (50), @ProfessionalQualification varchar (50), @NumberOfEmployees varchar (20), @CurrentIsp varchar (20), @CurrentEmailProgram varchar (20), @CurrentAccountingPackage varchar (20), @ACNorBRN varchar (20), @DialUpRequired bit, @BusinessOffering int, @HomePageText varchar (255), @MonStart varchar (5), @MonEnd varchar (5), @TueStart varchar (5), @TueEnd varchar (5), @WedStart varchar (5), @WedEnd varchar (5), @ThuStart varchar (5), @ThuEnd varchar (5), @FriStart varchar (5), @FriEnd varchar (5), @SatStart varchar (5), @SatEnd varchar (5), @SunStart varchar (5), @SunEnd varchar (5), @Amount money SET @fDebug = 'true' Declare FlatTableCursor Cursor For SELECT [id], SmeIdNumber, BusinessName, DateEntered, CurrentEmailAddress, CurrentUrl, EstablishedSince, AppointmentsRequired, Retail, WholeSale, HomeDelivery, FreeQuotes, ProprietorSalutation, BusinessBaseCategory, ProprietorName, ProprietorSurname, Mobile, BusinessAddressStreet1, BusinessAddressStreet2, BusinessAddressSuburb, BusinessAddressState, BusinessAddressCity, BusinessAddressPostCode, BusinessAddressPhoneAreaCode, BusinessAddressPhone, BusinessAddressFaxAreaCode, BusinessAddressFax, BusinessAddressCountry, PostalAddressStreet1, PostalAddressStreet2, PostalAddressSuburb, PostalAddressState, PostalAddressCity, PostalAddressPostCode, PostalAddressCountry, Association1, Association2, Association3, Association4, PaymentType, AmericanExpress, Visa, Mastercard, DinersClub, Bankcard, CardName, CardType, CardNumber, CardExpiry, Eftpos, Cheque, ABN, LicenseNumber, ProfessionalQualification, NumberOfEmployees, CurrentIsp, CurrentEmailProgram, CurrentAccountingPackage, ACNorBRN, DialUpRequired, BusinessOffering, HomePageText, MonStart, MonEnd, TueStart, TueEnd, WedStart, WedEnd, ThuStart, ThuEnd, FriStart, FriEnd, SatStart, SatEnd, SunStart, SunEnd, Amount FROM CitelDB..CleanSitelData Open FlatTableCursor FETCH NEXT FROM FlatTableCursor INTO @id, @SmeIdNumber, @BusinessName, @DateEntered, @CurrentEmailAddress, @CurrentUrl, @EstablishedSince, @AppointmentsRequired, @Retail, @WholeSale, @HomeDelivery, @FreeQuotes, @ProprietorSalutation, @BusinessBaseCategory, @ProprietorName, @ProprietorSurname, @Mobile, @BusinessAddressStreet1, @BusinessAddressStreet2, @BusinessAddressSuburb, @BusinessAddressState, @BusinessAddressCity, @BusinessAddressPostCode, @BusinessAddressPhoneAreaCode, @BusinessAddressPhone, @BusinessAddressFaxAreaCode, @BusinessAddressFax, @BusinessAddressCountry, @PostalAddressStreet1, @PostalAddressStreet2, @PostalAddressSuburb, @PostalAddressState, @PostalAddressCity, @PostalAddressPostCode, @PostalAddressCountry, @Association1, @Association2, @Association3, @Association4, @PaymentType, @AmericanExpress, @Visa, @Mastercard, @DinersClub, @Bankcard, @CardName, @CardType, @CardNumber, @CardExpiry, @Eftpos, @Cheque, @ABN, @LicenseNumber, @ProfessionalQualification, @NumberOfEmployees, @CurrentIsp, @CurrentEmailProgram, @CurrentAccountingPackage, @ACNorBRN, @DialUpRequired, @BusinessOffering, @HomePageText, @MonStart, @MonEnd, @TueStart, @TueEnd, @WedStart, @WedEnd, @ThuStart, @ThuEnd, @FriStart, @FriEnd, @SatStart, @SatEnd, @SunStart, @SunEnd, @Amount --print convert(varchar(100), @@Fetch_SStatus) While (@@Fetch_Status <> -1) Begin -- Pseudo Code: -- Insert these variable values into the appropriate -- table in the EzyShop database schema --Print 'The Business Name is: ' + @BusinessName -- Begin Transaction InsertCompanyDetailsTransaction SET @CurrentCountryId = NULL SET @CurrentRegionId = NULL SET @CurrentPhoneZone = NULL if (@fDebug = 'true') begin Print '' Print '@@FETCH_STATUS = ' + Convert(varchar, @@FETCH_STATUS) Print 'Inserting company details for: ' + @BusinessName Print '-->-->-->-->-->-->-->-->-->-->-->-->-->-->-->' end --*** Insert the company name INSERT INTO tblCompany ([name]) VALUES (@BusinessName) SET @CurrentCompanyId = @@IDENTITY if (@fDebug = 'true') begin Print 'CurrentCompanyId = ' + Convert(varchar, @CurrentCompanyId) end --************ All tblIsis Fields in one foul hit -- Transform the booleans from 'y/n' --> '1/0' if (@AppointmentsRequired = 'y') begin SET @AppointmentsRequired = '1' end else begin SET @AppointmentsRequired = '0' end if (@Retail = 'y') begin SET @Retail = '1' end else begin SET @Retail = '0' end if (@Wholesale = 'y') begin SET @Wholesale = '1' end else begin SET @Wholesale = '0' end if (@HomeDelivery = 'y') begin SET @HomeDelivery = '1' end else begin SET @HomeDelivery = '0' end if (@FreeQuotes = 'y') begin SET @FreeQuotes = '1' end else begin SET @FreeQuotes = '0' end -- NOTE: The eftpos and cheque fields may need -- to be transformed into bits i.e. 1/0 -- 0c, 0f -> 0k, 0m, 2i -> 2v, 1y, 1z, -- 1i -> 1l, 1n -> 1r, 2a -> 2e, 2h, 1w. INSERT INTO tblIsis (DateEntered, EstablishedSince, AppointmentsRequired, Retail, Wholesale, HomeDelivery, FreeQuotes, BusinessBaseCategory, MonStart, MonEnd, TueStart, TueEnd, WedStart, WedEnd, ThuStart, ThuEnd, FriStart, FriEnd, SatStart, SatEnd, SunStart, SunEnd, ABN, LicenseNumber, ProfessionalQualification, Association1, Association2, Association3, Association4, AmericanExpress, Visa, Mastercard, DinersClub, Bankcard, BusinessOffering, NumberOfEmployees, CurrentISP, CurrentEmailProgram, CurrentAccountingPackage, Eftpos, Cheque, ProprietorSalutation) VALUES (@DateEntered, @EstablishedSince, @AppointmentsRequired, @Retail, @Wholesale, @HomeDelivery, @FreeQuotes, @BusinessBaseCategory, @MonStart, @MonEnd, @TueStart, @TueEnd, @WedStart, @WedEnd, @ThuStart, @ThuEnd, @FriStart, @FriEnd, @SatStart, @SatEnd, @SunStart, @SunEnd, @ABN, @LicenseNumber, @ProfessionalQualification, @Association1, @Association2, @Association3, @Association4, @AmericanExpress, @Visa, @Mastercard, @DinersClub, @Bankcard, @BusinessOffering, @NumberOfEmployees, @CurrentISP, @CurrentEmailProgram, @CurrentAccountingPackage, @Eftpos, @Cheque, @ProprietorSalutation) /*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*-- * BUSINESS ADDRESS DETAILS *--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*/ --*** Convert the State Name into a Region Id --*** using a self join on the v_region_list view. --*** ('13' == The Zone_Id of Australia) SET @CurrentRegionId = NULL SET @CurrentPhoneZone = NULL if (@fDebug = 'true') begin Print '' Print 'BUSINESS ADDRESS DETAILS:' end SELECT @CurrentRegionId = B.Zone_Id FROM v_region_list A INNER JOIN v_region_list B ON A.Parent_id = B.Zone_id WHERE ((B.Parent_id = 13) AND (B.[Name] LIKE @BusinessAddressState)) if (@fDebug = 'true') begin Print 'CurrentRegionId = ' + Convert(varchar, @CurrentRegionId) end SELECT @CurrentCountryId = Zone_Id FROM v_country_list WHERE ([Name] LIKE @BusinessAddressCountry)) if (@fDebug = 'true') begin Print 'CurrentCountryId = ' + Convert(varchar, @CurrentCountryId) end INSERT INTO tblAddress (Place, Street, Suburb, Region_Id, Country_Id, City, Postcode, AddressType_Id) VALUES (@BusinessAddressStreet1, @BusinessAddressStreet2, @BusinessAddressSuburb, @CurrentRegionId, @CurrentCountryId, @BusinessAddressCity, @BusinessAddressPostCode, '2') SET @CurrentAddressId = @@IDENTITY if (@fDebug = 'true') begin Print 'CurrentAddressId = ' + Convert(varchar, @CurrentAddressId) end INSERT INTO tblCompanyAddress (Company_Id, Address_Id) VALUES (@CurrentCompanyId, @CurrentAddressId) --*** Handle the Business Address PHONE Details --*** BUG: The Zone_Id is getting a null value. INSERT INTO tblPhone (Zone_Id, AreaCode, Number) VALUES (@CurrentPhoneZone, @BusinessAddressPhoneAreaCode, @BusinessAddressPhone) SET @CurrentPhoneId = @@IDENTITY if (@fDebug = 'true') begin Print 'CurrentPhoneId = ' + Convert(varchar, @CurrentPhoneId) + ' (For Phone)' end --*** '4' is the 'Office' Phone Type INSERT INTO tblPhonesType (PhoneType_id, Phone_id) VALUES ('4', @CurrentPhoneId) INSERT INTO tblPhoneRelative (Company_id, Address_id, Phone_id) VALUES (@CurrentCompanyId, @CurrentAddressId, @CurrentPhoneId) --*** Handle the Business Address FAX Details --*** BUG: The Zone_Id is getting a null value. --*** Some bug below INSERT INTO tblPhone (Zone_Id, AreaCode, Number) VALUES (@CurrentPhoneZone, @BusinessAddressFaxAreaCode, @BusinessAddressFax) SET @CurrentPhoneId = @@IDENTITY if (@fDebug = 'true') begin Print 'CurrentPhoneId = ' + Convert(varchar, @CurrentPhoneId) + ' (For Fax)' end --*** '3' is the 'Fax' Phone Type INSERT INTO tblPhonesType (PhoneType_id, Phone_id) VALUES ('3', @CurrentPhoneId) INSERT INTO tblPhoneRelative (Company_id, Address_id, Phone_id) VALUES (@CurrentCompanyId, @CurrentAddressId, @CurrentPhoneId) /*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*-- * POSTAL ADDRESS DETAILS *--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*/ --*** Convert the State Name into a Region Id --*** using a self join on the v_region_list view. --*** ('13' == The Zone_Id of Australia in 'tblZone') SET @CurrentRegionId = NULL SET @CurrentPhoneZone = NULL if (@fDebug = 'true') begin Print '' Print 'POSTAL ADDRESS DETAILS:' end SELECT @CurrentRegionId = B.Zone_Id FROM v_region_list A INNER JOIN v_region_list B ON A.Parent_id = B.Zone_id WHERE ((B.Parent_id = 13) AND (B.[Name] LIKE @PostalAddressState)) if (@fDebug = 'true') begin Print 'CurrentRegionId = ' + Convert(varchar, @CurrentRegionId) end SELECT @CurrentCountryId = Zone_Id FROM v_country_list WHERE ([Name] LIKE @PostalAddressCountry)) if (@fDebug = 'true') begin Print 'CurrentCountryId = ' + Convert(varchar, @CurrentCountryId) end INSERT INTO tblAddress (Place, Street, Suburb, Region_Id, Country_Id, City, Postcode, AddressType_Id) VALUES (@PostalAddressStreet1, @PostalAddressStreet2, @PostalAddressSuburb, @CurrentRegionId, @CurrentCountryId, @PostalAddressCity, @PostalAddressPostCode, '1') SET @CurrentAddressId = @@IDENTITY if (@fDebug = 'true') begin Print 'CurrentAddressId = ' + Convert(varchar, @CurrentAddressId) end INSERT INTO tblCompanyAddress (Company_Id, Address_Id) VALUES (@CurrentCompanyId, @CurrentAddressId) /*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*-- * COMPANY EMAIL DETAILS (tblEmail, tblEmailRelative, tblEmailType) *--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*/ --*** '1' = the Corporate email type in tblEmailType -- Need to debug this INSERT INTO tblEmail (EmailType_id, EmailAddress) VALUES ('1', @CurrentEmailAddress) INSERT INTO tblEmailRelative (Company_id, Email_id) VALUES (@CurrentCompanyId, @@IDENTITY) /*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*-- * COMPANY URL DETAILS (tblURL, tblURLRelative, tblURLType) *--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*/ -- Need to debug this INSERT INTO tblURL (URLType_id, URL) VALUES ('1', @CurrentURL) INSERT INTO tblURLRelative (Company_id, URL_id) VALUES (@CurrentCompanyId, @@IDENTITY) /*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*-- * COMPANY KEYWORDS DETAILS (tblCompKeyWords) *--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*/ /*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*-- * COMPANY CONTACT (PEOPLE) DETAILS (tblPerson, tblCompanyPerson) *--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*/ --NOTES: will need to transform 'Middle Name', 'Contact Position' INSERT INTO tblPerson (FirstName, LastName) VALUES (@ProprietorName, @ProprietorSurname) INSERT INTO tblCompanyPerson (Person_id, Company_id) VALUES (@@IDENTITY, @CurrentCompanyId) -- NOTES; May need to insert values in tblPersonsType --QUESTION: Should I check whether the company already exists: Yes Commit Transaction InsertCompanyDetailsTransaction NextRecordLabel: FETCH NEXT FROM FlatTableCursor INTO @id, @SmeIdNumber, @BusinessName, @DateEntered, @CurrentEmailAddress, @CurrentUrl, @EstablishedSince, @AppointmentsRequired, @Retail, @WholeSale, @HomeDelivery, @FreeQuotes, @ProprietorSalutation, @BusinessBaseCategory, @ProprietorName, @ProprietorSurname, @Mobile, @BusinessAddressStreet1, @BusinessAddressStreet2, @BusinessAddressSuburb, @BusinessAddressState, @BusinessAddressCity, @BusinessAddressPostCode, @BusinessAddressPhoneAreaCode, @BusinessAddressPhone, @BusinessAddressFaxAreaCode, @BusinessAddressFax, @BusinessAddressCountry, @PostalAddressStreet1, @PostalAddressStreet2, @PostalAddressSuburb, @PostalAddressState, @PostalAddressCity, @PostalAddressPostCode, @PostalAddressCountry, @Association1, @Association2, @Association3, @Association4, @PaymentType, @AmericanExpress, @Visa, @Mastercard, @DinersClub, @Bankcard, @CardName, @CardType, @CardNumber, @CardExpiry, @Eftpos, @Cheque, @ABN, @LicenseNumber, @ProfessionalQualification, @NumberOfEmployees, @CurrentIsp, @CurrentEmailProgram, @CurrentAccountingPackage, @ACNorBRN, @DialUpRequired, @BusinessOffering, @HomePageText, @MonStart, @MonEnd, @TueStart, @TueEnd, @WedStart, @WedEnd, @ThuStart, @ThuEnd, @FriStart, @FriEnd, @SatStart, @SatEnd, @SunStart, @SunEnd, @Amount End --- CursorLoop Close FlatTableCursor Deallocate FlatTableCursor SET NOCOUNT OFF --<--<--<--<--<--<--<--<--<--<--<--<--<<--<--<--<--<--<--<--<--<--<--<--<--<--<--< end -- procTransformCleanFlatIntoEzy go procTransformCleanFlatIntoEzy