Well, here is the "sanitized" version. It's not pretty, but I had to substitute very generic names for the individual sites, and of course, the account and pw.
HQSvr = the main (local) server, that everything is being compared TO
Site_1 ... - ... Site_4 -- Generic names for the four servers at four remote locations. These and "HQSvr" above show up as the servers that the queries are run against, and as text strings in the output. The results should look like:
[tt]
CheckData HQSvr Site_1 Site_2 Site_3 Site_4
--------- ----- ------ ------ ------ ------
Item 1 HQSvr
Item 2 HQSvr
Item 3 HQSvr+ Site_3-
Item 4 HQSvr- Site_1+ Site_3-
Item 5 HQSvr- Site_2+ Site_3+
Item 6 HQSvr[/tt]
...etc.
The emphasis shows up in the report. The appended "+" or "-" shows that the site (column) has an item missing from the HQ site or vice-versa.
Hope that is understandable.
Query, in all its bulk, appears below:
USE model
IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'usp_AllDat_l_y' AND type = 'P')
DROP PROCEDURE usp_AllDat_l_y
GO
USE model
GO
create proc usp_AllDat_l_y
-- examples to run against:
-- usp_AllDat_l_y dbo, tm_location_db, location_state_country
-- usp_AllDat_l_y dbo, Group_x, Group_name
@DBO_Name_to_compare varchar(50) --i.e., dbo, or ARAdmin -
-- ONLY HQ, and ONLY certain tables
,@Table_name_to_compare varchar(100) --i.e., Tm_Location_Db
,@Field_name_to_compare nvarchar(50) --i.e., location_state_country
with encryption
as
-- Declare the string variables:
declare @SQL nvarchar(4000)
declare @HQSvr_as_a nvarchar(190)
declare @OJ_1 nvarchar(95)
declare @OJ_2 nvarchar(120)
declare @LOJ_as_b_Svr1 nvarchar(210)
declare @ROJ_as_b_Svr1 nvarchar(210)
declare @LOJ_as_b_Svr2 nvarchar(210)
declare @ROJ_as_b_Svr2 nvarchar(210)
declare @LOJ_as_b_Svr3 nvarchar(210)
declare @ROJ_as_b_Svr3 nvarchar(210)
declare @LOJ_as_b_Svr4 nvarchar(210)
declare @ROJ_as_b_Svr4 nvarchar(210)
declare @On_a_b nvarchar(120)
declare @A_null nvarchar(90)
declare @B_null nvarchar(90)
declare @Select_a nvarchar(100)
declare @Select_b nvarchar(100)
-- Build the string components:
set @Select_a = 'select a.'+rtrim(@Field_name_to_compare) +' as CheckData'
set @Select_b = 'select b.'+rtrim(@Field_name_to_compare) +' as CheckData'
set @HQSvr_as_a = 'FROM OPENROWSET(''MSDASQL'', ''DRIVER={SQL Server};
SERVER=HQSvrRMS;UID=RptAct;PWD=RptActPwd'',
ARSystem.'+ rtrim(@DBO_Name_to_compare)+'.'+
rtrim(@Table_name_to_compare)+') as a'
set @OJ_1 = 'outer join OPENROWSET(''MSDASQL'', ''DRIVER={SQL Server};
SERVER='
set @OJ_2 = ';UID=RptAct;PWD=RptActPwd'',
ARSystem.dbo.'+rtrim(@Table_name_to_compare)+') as b'
Set @LOJ_as_b_Svr1 = ' Left ' + @OJ_1 + 'Site1Svr' + @OJ_2
Set @ROJ_as_b_Svr1 = ' right ' + @OJ_1 + 'Site1Svr' + @OJ_2
Set @LOJ_as_b_Svr2 = ' Left ' + @OJ_1 + 'Site2Svr' + @OJ_2
Set @ROJ_as_b_Svr2 = ' right ' + @OJ_1 + 'Site2Svr' + @OJ_2
Set @LOJ_as_b_Svr3 = ' Left ' + @OJ_1 + 'Site3Svr' + @OJ_2
Set @ROJ_as_b_Svr3 = ' right ' + @OJ_1 + 'Site3Svr' + @OJ_2
Set @LOJ_as_b_Svr4 = ' Left ' + @OJ_1 + 'Site4Svr' + @OJ_2
Set @ROJ_as_b_Svr4 = ' right ' + @OJ_1 + 'Site4Svr' + @OJ_2
Set @On_a_b = ' on a.'+ rtrim(@Field_name_to_compare)+
' = b.'+ rtrim(@Field_name_to_compare)
Set @A_Null= ' where a.'+ rtrim(@Field_name_to_compare)+' is null'
Set @B_Null= ' where b.'+ rtrim(@Field_name_to_compare)+' is null'
-- Make the Query:
set @SQL =
@Select_a +
', '' HQSvr'' as HQSvr, '''' as Site_1, '''' as Site_2, '''' '+
'as Site_3, '''' as Site_4 ' +
@HQSvr_as_a
-- Above is FIRST / MAIN recordset: HQSvr _FULL_ listing
+' Union '+
@Select_a +
', '' HQSvr+'' as HQSvr, ''Site_1-'' as Site_1, '''' as Site_2, '''' '+
'as Site_3, '''' as Site_4 ' +
@HQSvr_as_a +
@LOJ_as_b_Svr1 +
@On_a_b +
@B_null
-- Above is HQSvr against Site_1 for records MISSING in Site_1
+' union '+
@Select_b +
', '' HQSvr-'' as HQSvr, ''Site_1+'' as Site_1, '''' as Site_2, '''' '+
'as Site_3, '''' as Site_4 ' +
@HQSvr_as_a +
@ROJ_as_b_Svr1 +
@On_a_b +
@A_null
-- Above is Site_1 against HQSvr for records MISSING in HQSvr
+' union '+
@Select_a +
', '' HQSvr+'' as HQSvr, '''' as Site_1, ''Site_2-'' as Site_2, '''' '+
'as Site_3, '''' as Site_4 ' +
@HQSvr_as_a +
@LOJ_as_b_Svr2 +
@On_a_b +
@B_null
-- Above is HQSvr against Site_2 for records MISSING in Site_2
+' union '+
@Select_b +
', '' HQSvr-'' as HQSvr, '''' as Site_1, ''Site_2+'' as Site_2, '''' '+
'as Site_3, '''' as Site_4 ' +
@HQSvr_as_a +
@ROJ_as_b_Svr2 +
@On_a_b +
@A_null
-- Above is Site_2 against HQSvr for records MISSING in HQSvr
+' Union ' +
@Select_a +
', '' HQSvr+'' as HQSvr, '''' as Site_1, '''' as Site_2, ''Site_3-'' '+
'as Site_3, '''' Site_4 ' +
@HQSvr_as_a +
@LOJ_as_b_Svr3 +
@On_a_b +
@B_null
-- Above is HQSvr against Site_3 for records MISSING in Site_3
+' union '+
@Select_b +
', '' HQSvr-'' as HQSvr, '''' as Site_1, '''' as Site_2, ''Site_3+'' '+
'as Site_3, '''' Site_4 ' +
@HQSvr_as_a +
@ROJ_as_b_Svr3 +
@On_a_b +
@A_null
-- Above is Site_3 against HQSvr for records MISSING in HQSvr
+' Union ' +
@Select_a +
', '' HQSvr+'' as HQSvr, '''' as Site_1, '''' as Site_2, '''' '+
'as Site_3, ''Site_4-'' Site_4 ' +
@HQSvr_as_a +
@LOJ_as_b_Svr4 +
@On_a_b +
@B_null
-- Above is HQSvr against Site_4 for records MISSING in Site_4
+' union '+
@Select_b +
', '' HQSvr-'' as HQSvr, '''' as Site_1, '''' as Site_2, '''' '+
'as Site_3, ''Site_4+'' Site_4 ' +
@HQSvr_as_a +
@ROJ_as_b_Svr4 +
@On_a_b +
@A_null
-- Above is Site_4 against HQSvr for records MISSING in HQSvr
-- Use Below to Test SQL
--print @sql
exec sp_executesql @SQL
-- to test it run the below code without the --
-- usp_AllDat_l_y aradmin,Tm_Action_Type_Db,Action_Type
I'll add a post containing the OUTPUT of the query string (i.e., the concatonated @SQL).
--
Marc Visconte
CSC
Lead RMS Developer
Crystal Reports