In the process of upgrading from GoldMine 6.7 to 9.2, I discovered that Detail names longer than 20 characters were cut off. The UI seems to be inserting the comment delimiter (//) in Detail headers.
For example, I have a profile named “Airborne Account Number”. The Profile Choices list shows it with two slashes inserted after 20 characters. But when I click on Edit to remove the slashes, they are not there:
When I check the Lookup table in SQL, I don’t see any slashes:
But when I select “Airborne Account Num//ber” as the Detail name, the name is truncated:
When I click on the Setup tab of an existing record with the long Detail name, I get this message:
The Detail is stored in ContSupp.Contact, which is 40 characters long, so it doesn’t seem like it would need to be limited to 20 characters. However, FrontRange Support informed me that the 20-character limitation solved another issue and will not be changed, so it’s up to me to shorten all my existing Detail names.
Shortening the Detail Names
I developed the following procedure and scripts to shorten my Detail names.
Warning This is an advanced procedure requiring an in-depth understanding of Microsoft SQL and of GoldMine data structures. The procedure will irreversibly alter your GoldMine data. Make sure you have a good SQL backup before you start and that you know how to restore SQL backups. The changes made by this procedure will not sync to other GoldMine installations unless you re-sync all of your data.
The procedure worked for me, but your environment is different. So use this information at your own risk—it’s not guaranteed in any way. It is recommended that you contact your GoldMine professional or MCB Systems for assistance.
Note This procedure does not work for the special Detail called “World Wide Web Site Address” that was present in very old GoldMine versions. The new Detail, “Web Site”, requires special coding. Contact MCB Systems if you need help converting this Detail.
Step 1: Identify Long Details
After rehosting to GoldMine 9.x, run the the following script from SQL Management Studio to identify the long Details. If you have multiple databases, run this against each database.
select distinct left(contact,20) + '|' + substring(contact,21,20) from contsupp where rectype = 'P' and Len(contact) >20 order by left(contact,20) + '|' + substring(contact,21,20)
Copy the script output to an Excel spreadsheet. If you ran it against multiple databases, sort the spreadsheet and eliminate duplicates.
Step 2: Add a Stored Proc to Rename Details
Run the following script against each of your GoldMine databases. It adds a stored procedure called Rename_Detail, but it doesn’t actually change any data.
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Rename_Detail]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
begin
drop procedure [dbo].[Rename_Detail]
end
GO
/*
Rename one GoldMine Detail (Profile):
- Update all occurrences in ContSupp.
- Update the value in Lookup (if Lookup table is present in current database).
Note: This proc does not update the Last Update fields in the Detail record.
It is assumed you prefer to leave those to reflect the last _manual_ update.
Warning: This change is NOT sync-aware. Run this on a primary installation
then re-sync _all_ data (ignore cutoff) to other installations.
*/
CREATE procedure Rename_Detail
( @OldDetailName varchar(40)
, @NewDetailName varchar(40)
)
as
set nocount on
declare @DetailsUpdated int
, @LookupsUpdated int
, @UpdateError int
, @ReturnValue int
, @ProcedureName sysname
set @ProcedureName = object_name(@@procid)
------------------------------------------------------------------------------------------------------
-- Make sure we have required parameters
------------------------------------------------------------------------------------------------------
if (@OldDetailName is null or rtrim(@OldDetailName) = '')
or (@NewDetailName is null or rtrim(@NewDetailName) = '')
begin
raiserror ('%s requires that you specify @OldDetailName and @NewDetailName', 16, 1, @ProcedureName)
goto EndProc
end
begin transaction
raiserror ('%s: Preparing to rename detail from "%s" to "%s"', 10, 1, @ProcedureName, @OldDetailName, @NewDetailName)
------------------------------------------------------------------------------------------------------
-- Update ContSupp
------------------------------------------------------------------------------------------------------
update ContSupp
set Contact = @NewDetailName
, U_Contact = upper(@NewDetailName)
where RecType = 'P' -- Profile record
and Contact = @OldDetailName
select @UpdateError = @@Error, @DetailsUpdated = @@RowCount
if @UpdateError = 0 -- No SQL error
begin
set @ReturnValue = 0 -- successfully updated ContSupp
if @DetailsUpdated = 0
begin
raiserror ('%s: - No ContSupp detail records found', 10, 1, @ProcedureName, @DetailsUpdated)
end
else
begin
raiserror ('%s: - Successfully renamed %d ContSupp detail records', 10, 1, @ProcedureName, @DetailsUpdated)
end
end
else -- SQL error
begin
raiserror ('%s: ContSupp update failed with SQL error %d.', 16, 1, @ProcedureName, @UpdateError)
set @ReturnValue = @UpdateError -- Error number from Update
goto RollbackTrans
end
------------------------------------------------------------------------------------------------------
-- Update Lookup
------------------------------------------------------------------------------------------------------
if not exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Lookup]') and OBJECTPROPERTY(id, N'IsTable') = 1)
begin
raiserror ('%s: - Lookup table does not exist in this database. Lookup rename skipped.', 10, 1, @ProcedureName)
goto CommitTrans
end
update Lookup
set Entry = @NewDetailName
, U_Entry = upper(@NewDetailName)
where FieldName = 'MPROFHEAD V' -- Profile Header Value
and Entry = @OldDetailName
select @UpdateError = @@Error, @LookupsUpdated = @@RowCount
if @UpdateError = 0 -- no SQL error
begin
if @LookupsUpdated = 1
begin
set @ReturnValue = 0 -- successfully updated 1 Lookup
raiserror ('%s: - Successfully renamed %d Lookup detail header records', 10, 1, @ProcedureName, @LookupsUpdated)
end
else
begin
raiserror ('%s: - Expected to update one Lookup but updated %d', 16, 1, @ProcedureName, @LookupsUpdated)
set @ReturnValue = -1
goto RollbackTrans
end
end
else -- SQL error
begin
raiserror ('%s: - Lookup update failed with SQL error %d', 16, 1, @ProcedureName, @UpdateError)
set @ReturnValue = @UpdateError -- Error number from Update
goto RollbackTrans
end
set @ReturnValue = @DetailsUpdated
goto CommitTrans
RollbackTrans:
rollback transaction
raiserror ('%s: - Transaction rolled back. All changes made by this call to the proc have been reversed.', 16, 1, @ProcedureName)
goto EndProc
CommitTrans:
commit transaction
EndProc:
return @ReturnValue
GO
Step 3: Rename the Details
Finally, call the stored proc once for each Detail you want to rename, and in each database where that detail exists. The Excel spreadsheet from Step 1 tells you which Details need to be renamed; you need to come up with an abbreviated name for each one, and then copy the full name and the abbreviation into a script that calls the stored proc over and over.
Warning This is the bit that irretrievably changes your data. See full Warning above.
Here is an excerpt from my script:
exec @ReturnCode = dbo.Rename_Detail @OldDetailName = 'Airborne Account Number', @NewDetailName = 'Airborne Account No' exec @ReturnCode = dbo.Rename_Detail @OldDetailName = 'Express Mail Corp. Acct. No.', @NewDetailName = 'Expr Mail Corp Acct' exec @ReturnCode = dbo.Rename_Detail @OldDetailName = 'Federal Express Acct. #', @NewDetailName = 'FedEx Account No' exec @ReturnCode = dbo.Rename_Detail @OldDetailName = 'GoldMine Serial Number', @NewDetailName = 'GoldMine Serial No' exec @ReturnCode = dbo.Rename_Detail @OldDetailName = 'Tax Exempt ID number(s)', @NewDetailName = 'Tax Exempt ID No(s)' exec @ReturnCode = dbo.Rename_Detail @OldDetailName = 'UPS Billing Invoice Number', @NewDetailName = 'UPS Billing Inv No'
Step 4: Check the Results
The stored proc will print information about the Details that it updates. Review this output, checking in particular for any errors reported. Also review the actual data in your GoldMine database. If you see any issues, restore your SQL backup and start over. If everything looks okay and you synchronize with other sites, you must now re-sync all data (“Ignore Cutoff Date”) in order for the changes to transfer to the other sites.

Really was amazing your solution, thanks!!