sqlservercentral.com. The original poster wanted to have a dynamic stored
procedure which can tell you the columns with different values in two tables.
Here is the code;
ALTER Procedure uspTableDiff
   @pTableName1 varchar(100), -- Name of First Table
   @pTableName2 varchar(100), -- Name of 2nd Table
   @pJoinCondition varchar(Max), -- Join Condition. I am assuming that 
                                 -- you will use alias a for table in 
                                 -- @pTableName1 and b for 
                                 -- table in @pTableName2
   @pIDColumns varchar(Max) -- Valid ID columns to diplay
As
Begin
   Declare @vSQL varchar(max)
   Declare @vCols varchar(max)
   Set @vCols = ''
    -- Check if the specified tables areidentical or
-- not as you will match schema wise
-- identical tables.
if Exists(
      Select *
from
from
      (
      Select [name] from sys.columns
      where Object_id = Object_id(@pTableName1) 
      ) c1
      Full Outer Join 
      (
      Select [name] 
      from sys.columns 
      where Object_id = Object_id(@pTableName2) 
     ) c2 on c2.[name] = c1.[name]
     Where c2.[name] is Null or c1.[Name] is Null
   )
   begin
      Select 'Tables Not Identical'
      Return
   end 
   Select @vCols = 
      Stuff((Select ',case when IsNull(a.' + [name] + 
                               ','''') = IsNull(b.' + [name] + ','''') 
                       then 1 else 0 end 
                       as [SIM_' +   @pTableName1 + '.' + [name] + ']' 
   from sys.columns
where Object_id = Object_id(@pTableName1) for XML Path('')),1,1,'')
where Object_id = Object_id(@pTableName1) for XML Path('')),1,1,'')
   -- Concatenate the @vCols with main sql 
   Set @vSQL = ' Select ' + @pIDColumns + ',' + @vCols 
   + ' From '+ @pTableName1 +  ' a Inner Join ' 
   + @pTableName2 + 
   ' b on ' + @pJoinCondition
Print @vSQL
   Exec (@vSQL)
end  
 
No comments:
Post a Comment