테이블 설계를 변경해야 하는 경우
해당 테이블을 사용하는 STORED PROCEDURE, STORED FUNCTION 등을 찾아야 하는 데요.
그래야 변경을 할 것인지 아닌지를 결정할 수 있고, 변경할 수 있는 범위를 가늠할 수도 있고요.
이 또한 문서화가 제대로 되어있지 않을 수 밖에 없으니..

특정 테이블을 사용하는 PROCEDURE를 찾는 쿼리입니다.

SELECT 
    DISTINCT O.NAME
FROM 
    SYSDEPENDS AS D
INNER JOIN 
    SYSOBJECTS AS O 
ON 
    D.ID = O.ID
WHERE 
    O.XTYPE = 'P' 
	AND D.DEPID = 
	    (
    	    SELECT 
    	        ID 
    	    FROM 
    	        SYSOBJECTS 
    	    WHERE 
    	        NAME = '테이블명'
	    )

한계는 존재합니다. 테이블이 정의된 CATEGORY와 동일한 CATEGORY 내에 존재하는 STORED PROCEDURE만 찾을 수 있다는 것인데요.
물론, 다른 CATEGORY에 정의된 테이블을 사용하는 게 옳은 지에 대해서는 저는 아직 잘 모르겠습니다.
다만 가급적 안하는 게 좋겠죠. 하지만 그런 경우 자체는 존재하니.ㅠㅠ
차라리 다른 CATEGORY에 존재하는 TABLE의 내용을 사용하고 싶은 경우에는 TABLE 자체를 자신의 CATEGORY로 자동으로 MIRRORING해주는 게 맞을 듯 합니다. 실시간으로 해주고 싶다면, TRIGGER도 있고, 사용이 잘 안되는 시간대에 이벤트로 변경된 것만 긁어와도 되고, 방법이야 많으니까요. ㅎㅎ

'배움 > MS-SQL' 카테고리의 다른 글

특정 테이블을 사용하는 STORED PROCEDURE 찾기  (2) 2012.03.08
TABLE COLUMN 정보 확인 QUERY  (0) 2012.03.08

DATABASE 테이블에 대한 설계 문서는 가장 중요합니다.
하지만, 실상 문서 자체가 현 상태를 제대로 설명해주는 경우는 잘 없습니다.
그래서 확인해야 할 경우가 존재하는 데요.
아래 쿼리를 사용하면 됩니다.
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '테이블명' ORDER BY ORDINAL_POSITION
각 COLUMN이 NULLABLE인지 아닌지, 그 데이터 타입이 무엇인지 등을 확인할 수 있습니다.
그리고 덤으로 해당 테이블의 PRIMARY KEY인 COLUMN을 확인할 수 있는 QUERY도 아래에 두겠습니다.
SELECT 
    COLUMN_NAME
FROM 
    INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE 
    OBJECTPROPERTY(OBJECT_ID(CONSTRAINT_NAME), 'ISPRIMARYKEY') = 1
    AND 
        TABLE_NAME = '테이블명'
이 역시 테이블 정보를 확인하는 데, 필수적인 정보겠죠.

종종 쓸 수 밖에 없는 QUERY라서 BACKUP용도로 포스팅합니다.^^


'배움 > MS-SQL' 카테고리의 다른 글

특정 테이블을 사용하는 STORED PROCEDURE 찾기  (2) 2012.03.08
TABLE COLUMN 정보 확인 QUERY  (0) 2012.03.08