/* ----------------------------------------------------------------------------------------------------
컬럼 자료형 검사
- 컬럼 이름이 같은데 자료형이 틀린 테이블 및 컬럼을 확인한다.
---------------------------------------------------------------------------------------------------- */
SET NOCOUNT ON
DECLARE @TU_COLUMN_INFO TABLE
(
SEQ INT IDENTITY
, [OBJECT_ID] INT
, TABLE_NAME NVARCHAR(MAX)
, COLUMN_NAME NVARCHAR(MAX)
, SYSTEM_TYPE_ID INT
)
DECLARE @COLUMN_CNT INT = 0
, @OBJECT_ID BIGINT = 0
, @TABLE_NAME NVARCHAR(MAX) = ''
, @COLUMN_NAME NVARCHAR(MAX) = ''
, @SYSTEM_TYPE_ID INT = 0
-- 검사할 컬럼명을 등록한다.
INSERT INTO @TU_COLUMN_INFO ([OBJECT_ID], TABLE_NAME, COLUMN_NAME, SYSTEM_TYPE_ID)
SELECT A.[OBJECT_ID], A.[NAME], B.[NAME], SYSTEM_TYPE_ID
FROM SYS.TABLES AS A
INNER JOIN SYS.COLUMNS AS B ON B.[OBJECT_ID] = A.[OBJECT_ID]
WHERE B.[NAME] NOT IN ('NAME', 'QTY')
-- 컬럼 수 체크
SET @COLUMN_CNT = @@ROWCOUNT
-- 컬럼 수 만큼 돈다.
WHILE(@COLUMN_CNT > 0)
BEGIN
-- 검사할 컬럼 정보를 담는다.
SELECT @TABLE_NAME = TABLE_NAME
, @COLUMN_NAME = COLUMN_NAME
, @SYSTEM_TYPE_ID = SYSTEM_TYPE_ID
FROM @TU_COLUMN_INFO
WHERE SEQ = @COLUMN_CNT
-- 모든 컬럼에 대해서 검사한다.
IF EXISTS (
SELECT 1
FROM SYS.COLUMNS
WHERE [NAME] = @COLUMN_NAME
AND SYSTEM_TYPE_ID <> @SYSTEM_TYPE_ID
AND DEFAULT_OBJECT_ID > 0)
BEGIN
-- 다른게 있으면 찍는다.
SELECT CHECK_TYPE = '원본', TABLE_NAME = @TABLE_NAME, COLUMN_NAME = @COLUMN_NAME, @SYSTEM_TYPE_ID
UNION ALL
SELECT '대상', OBJECT_NAME(OBJECT_ID), '', SYSTEM_TYPE_ID
FROM SYS.COLUMNS
WHERE [NAME] = @COLUMN_NAME
AND SYSTEM_TYPE_ID <> @SYSTEM_TYPE_ID
AND DEFAULT_OBJECT_ID > 0
END
-- 다음 컬럼으로 이동
SET @COLUMN_CNT += -1;
END