/*      ----------------------------------------------------------------------------------------------------

 

        컬럼 자료형 검사

        - 컬럼 이름이 같은데 자료형이 틀린 테이블 컬럼을 확인한다.

 

----------------------------------------------------------------------------------------------------   */

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

 

 

 

+ Recent posts