I’ve created something like this every time I need to rebuild the Sitecore “reporting” database (this link covers the basic process), this time I’m posting it online so I can re-use it next time around!
This is the script for generating the T-SQL that’s required to complete step #3 in the write-up when you’re following the “Rebuild Reporting Database” instructions:
“In the Rebuild Reporting Database page, when you see Waiting to receive to data status, copy the following marketing definition tables from the primary to the secondary reporting database”
I have written the SQL several times to do this, but this time I took a run at DRY (don’t repeat yourself) to script this SQL out. Alas, I think my T-SQL comes in at 40+ lines of code versus the raw SQL to run which is just 35 lines and much easier to read, in my opinion.
Either way, you can pick which you prefer as I’ll share them both here
First, the plain vanilla SQL commands for copying those database tables:
INSERT INTO target_Analytics.dbo.CampaignActivityDefinitions SELECT source_Analytics.dbo.CampaignActivityDefinitions.* FROM source_Analytics.dbo.CampaignActivityDefinitions ; INSERT INTO target_Analytics.dbo.GoalDefinitions SELECT source_Analytics.dbo.GoalDefinitions.* FROM source_Analytics.dbo.GoalDefinitions ; INSERT INTO target_Analytics.dbo.OutcomeDefinitions SELECT source_Analytics.dbo.OutcomeDefinitions.* FROM source_Analytics.dbo.OutcomeDefinitions ; INSERT INTO target_Analytics.dbo.MarketingAssetDefinitions SELECT source_Analytics.dbo.MarketingAssetDefinitions.* FROM source_Analytics.dbo.MarketingAssetDefinitions ; INSERT INTO target_Analytics.dbo.Taxonomy_TaxonEntity SELECT source_Analytics.dbo.Taxonomy_TaxonEntity.* FROM source_Analytics.dbo.Taxonomy_TaxonEntity ; INSERT INTO target_Analytics.dbo.Taxonomy_TaxonEntityFieldDefinition SELECT source_Analytics.dbo.Taxonomy_TaxonEntityFieldDefinition.* FROM source_Analytics.dbo.Taxonomy_TaxonEntityFieldDefinition ; INSERT INTO target_Analytics.dbo.Taxonomy_TaxonEntityFieldValue SELECT source_Analytics.dbo.Taxonomy_TaxonEntityFieldValue.* FROM source_Analytics.dbo.Taxonomy_TaxonEntityFieldValue ;
And now, here’s the T-SQL attempt to “simplify” the process of creating a script like the above for future projects (yet I prefer it less to the brute force approach):
The advantage to the below is you set your source and target variables to the names of the SQL Server databases, and then you’re all set.
DECLARE @source VARCHAR(100) DECLARE @target VARCHAR(100) SET @source = 'source_Analytics' SET @target = 'target_Analytics' SET NOCOUNT ON --List approach will work in SQL Server 2012 only DECLARE @ListOfTables TABLE(IDs VARCHAR(100)); INSERT INTO @ListOfTables VALUES('CampaignActivityDefinitions'), ('GoalDefinitions'), ('OutcomeDefinitions'), ('MarketingAssetDefinitions'), ('Taxonomy_TaxonEntity'), ('Taxonomy_TaxonEntityFieldDefinition'), ('Taxonomy_TaxonEntityFieldValue'); SET ROWCOUNT 0 SELECTX NULL mykey, * INTO #mytemp FROM @ListOfTables DECLARE @theTable varchar(100) DECLARE @sql varchar(1000) SET ROWCOUNT 1 UPDATE #mytemp SET mykey = 1 WHILE @@rowcount > 0 BEGIN SET ROWCOUNT 0 SELECT @theTable = (SELECT IDs FROM #mytemp WHERE mykey = 1) PRINT 'INSERT INTO ' + @target + '.dbo.' + @theTable + ' SELECT ' + @source + '.dbo.' + @theTable + '.* FROM ' + @source + '.dbo.' + @theTable + ' ;' --use 'EXEC to run the dynamic SQL, instead of PRINT, --if you're feeling brave DELETE #mytemp WHERE mykey = 1 SET ROWCOUNT 1 UPDATE #mytemp SET mykey = 1 END SET ROWCOUNT 0 DROP TABLE #mytemp