Skip to content

Instantly share code, notes, and snippets.

@mikebeaton
Created April 11, 2020 13:46
Show Gist options
  • Select an option

  • Save mikebeaton/ea9860ff9000fc35f36e9efd46c3c85d to your computer and use it in GitHub Desktop.

Select an option

Save mikebeaton/ea9860ff9000fc35f36e9efd46c3c85d to your computer and use it in GitHub Desktop.

Revisions

  1. mikebeaton created this gist Apr 11, 2020.
    43 changes: 43 additions & 0 deletions SqlDataComparison_Gist3.sql
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,43 @@
    DECLARE @SQL NVARCHAR(MAX)
    DECLARE @i INT

    SET @SQL = 'SELECT '

    SET @SQL = @SQL + '''OURS <<<'' AS [ ],' + @CRLF
    SELECT @SQL = @SQL + @TAB + ' [ours].[' + #columns.name + '],' + @CRLF
    FROM #columns

    SET @SQL = @SQL + @TAB + ' ''THEIRS >>>'' AS [ ],' + @CRLF
    SELECT @SQL = @SQL + @TAB + ' [theirs].[' + #columns.name + '],' + @CRLF
    FROM #columns

    SELECT @SQL = SUBSTRING(@SQL, 1, LEN(@SQL) - LEN(@CRLF) - 1) + @CRLF

    SELECT @SQL = @SQL + 'FROM ' + @local_table_name + ' [ours]' + @CRLF
    SELECT @SQL = @SQL + 'FULL OUTER JOIN ' + @remote_table_name + ' [theirs]' + @CRLF

    SET @i = 0
    SELECT
    @SQL = @SQL + CASE WHEN @i = 0 THEN 'ON' ELSE 'AND' END + ' [ours].[' + #key_columns.name + '] = [theirs].[' + #key_columns.name + ']' + @CRLF,
    @i = @i + 1
    FROM #key_columns

    SET @i = 0
    SELECT
    @SQL = @SQL +
    CASE WHEN @i = 0 THEN 'WHERE ' ELSE ' OR ' END +
    '[ours].[' + #key_columns.name + '] IS NULL AND [theirs].[' + #key_columns.name + '] IS NOT NULL' + @CRLF +
    ' OR [ours].[' + #key_columns.name + '] IS NOT NULL AND [theirs].[' + #key_columns.name + '] IS NULL' + @CRLF,
    @i = @i + 1
    FROM #key_columns

    SELECT
    @SQL = @SQL +
    ' OR [ours].[' + #columns.name + '] IS NULL AND [theirs].[' + #columns.name + '] IS NOT NULL' + @CRLF +
    ' OR [ours].[' + #columns.name + '] IS NOT NULL AND [theirs].[' + #columns.name + '] IS NULL' + @CRLF +
    ' OR [ours].[' + #columns.name + '] <> [theirs].[' + #columns.name + ']' + @CRLF,
    @i = @i + 1
    FROM #columns
    LEFT OUTER JOIN #key_columns
    ON #columns.column_id = #key_columns.column_id
    WHERE #key_columns.column_id IS NULL