I used this script for similar purpose:
USE [Database]
DECLARE @name sysname
DECLARE @cntAll int
DECLARE @cntDist int
DECLARE @cntNull int
DECLARE @err int
DECLARE @stm nvarchar(max)
DECLARE @tblName sysname
SET @tblName = 'Table'
-- All rows
SET @stm = N'SELECT @cntAll = COUNT(*) FROM dbo.[' + @tblName + ']'
EXEC @err = sp_executesql @stm, N'@cntAll int OUTPUT', @cntAll OUTPUT
IF @err <> 0 BEGIN
RETURN
END
-- Distinct rows by column
DECLARE columns_tables CURSOR GLOBAL FORWARD_ONLY READ_ONLY FOR
SELECT [name] FROM sys.columns WHERE object_id = OBJECT_ID('dbo.[' + @tblName + ']')
OPEN columns_tables
FETCH NEXT FROM columns_tables INTO @name
WHILE (@@FETCH_STATUS = 0) BEGIN
SET @stm =
N'SELECT @cntDist = COUNT(DISTINCT [' + @name + ']) '+
'FROM dbo.[' + @tblName + '] '+
'WHERE [' + @name + '] IS NOT NULL'
EXEC @err = sp_executesql @stm, N'@cntDist int OUTPUT', @cntDist OUTPUT
IF @err <> 0 BEGIN
CLOSE columns_tables
DEALLOCATE columns_tables
BREAK
END
SET @stm =
N'IF EXISTS (' +
'SELECT ([' + @name + ']) '+
'FROM dbo.[' + @tblName + '] '+
'WHERE [' + @name + '] IS NULL'+
') SET @cntNull = 1 '+
'ELSE SET @cntNull = 0'
EXEC @err = sp_executesql @stm, N'@cntNull int OUTPUT', @cntNull OUTPUT
IF @err <> 0 BEGIN
CLOSE columns_tables
DEALLOCATE columns_tables
BREAK
END
IF (@cntAll = @cntDist) AND (@cntNull = 0) BEGIN
PRINT 'Possible column ' + @name
END
FETCH NEXT FROM columns_tables INTO @name
END
CLOSE columns_tables
DEALLOCATE columns_tables