Comment 6
-
군고구마
2014.10.02 12:10
재미로 만들어서 ^^;; 대충이긴 하지만 참고하시면 좋을 듯합니다.TBL이 있는 것만 뽑고 싶으면 파라미터를 추가해서 받거나 where조건에 like문으로 넣어주시면 될듯하네요create PROC PROC_TableName@NAME VARCHAR(100)ASSET NOCOUNT ONdeclare @table table(col1 varchar(100),col2 char(15),col3 char(5), col4 char(10) , col5 char(10))INSERT INTO @tableexec sp_depends testselect col1 from @tablewhere col2 = 'user table'group by col1go -
HoyaSoft
2014.10.02 13:17
제가 의도한 질문과는좀 다르지만
참조하겠습니다 ^^
sp_depends도 모르고있었는데 감사합니다 ㅎ
sp_depends는 같은 server의 다른 DB를 참조하는 항목은 찾지를 못하네요.
지금 하려는 작업이 A, B 두개의 DB가 같은 SERVER안에 존재할때
[A] DB의 프로시져에서 [B] DB의 테이블중 어떤것들을 사용하고 있는지 리스트를 뽑아서 임시
[B] DB 작업시 임시DB에 [A] DB에서 사용하는 [B]의 데이터만 데이터를 옴겨놓고
[A] DB에서 서비스하는 것들을 문제없이 서비스를 유지하기 위한 목적입니다. ㅜ 구글링 실력이 모자라서 그런지 찾지를 못하겠네요 ㅋ
-
처리짱
2014.10.02 15:41
sp_helptext 프로시져명 으로
텍스트를 짜르는 방식으로 하면 될려나요..
-
HoyaSoft
2014.10.02 16:33
sp_helptext로 잘라서 해결했는데 이상하게 중복된 값이 나오네요
신기방기..왜그럴까요 ?
-
HoyaSoft
2014.10.02 16:26
자체 해결했습니다.. ㅎㅎ 근데 중복을 제거했는데도 중복된값이 나오는 -0- ; 좀더 수정해봐야겠습니다.
DECLARE @DB_NAME NVARCHAR(100)
SET @DB_NAME = 'dbname.dbo.' --<-- 참조되고 있는 DB를 입력한다.-- 1. 입력한 DB를 참조하는 SP 목록을 입력한다.
CREATE TABLE #REFER_SP ( SEQ INT IDENTITY(1,1), SP_NAME NVARCHAR(100) )
INSERT INTO #REFER_SP ( SP_NAME )
exec sp_search @DB_NAME-- 2. 입력한 DB를 참조하는 SP 목록의 내용을 입력한다.
CREATE TABLE #SP_CONTEXT ( CONTEXT NVARCHAR(MAX) )DECLARE @SP_COUNT INT
, @SP_MAX_COUNT INT
, @SP_NAME NVARCHAR(100)SELECT @SP_COUNT = 1 , @SP_MAX_COUNT = COUNT(*) FROM #REFER_SP
WHILE @SP_COUNT <= @SP_MAX_COUNT
BEGIN
SELECT @SP_NAME = SP_NAME FROM #REFER_SP WHERE SEQ = @SP_COUNTINSERT INTO #SP_CONTEXT
exec sp_helptext @SP_NAME
SET @SP_COUNT = @SP_COUNT + 1;
END-- 3. 참조하는 문장이 포함된 부분만 추출한다.
CREATE TABLE #REFER_SP_CONTEXT ( CONTEXT NVARCHAR(MAX) )
-- 조회할 문장 앞부분을 제거 하여 입력
INSERT INTO #REFER_SP_CONTEXT
SELECT SUBSTRING(CONTEXT,CHARINDEX(@DB_NAME,CONTEXT), LEN(CONTEXT))
FROM #SP_CONTEXT
WHERE CONTEXT LIKE '%'+@DB_NAME+'%'
-- 4. 최종적으로 중복을 제거한 참조테이블 리스트 출력, 참조 건수와 함께
SELECT UPPER(TBL.TABLE_NAME) TABLE_NAME , SUM(TBL.REFER_COUNT) REFER_COUNT
FROM (
SELECT X.TABLE_NAME, COUNT(*) REFER_COUNT
FROM (
SELECT LTRIM(RTRIM(SUBSTRING(CONTEXT , 0, CASE WHEN CHARINDEX(' ',CONTEXT) = 0
THEN LEN(CONTEXT)
ELSE CHARINDEX(' ',CONTEXT)
END
))) AS TABLE_NAME
FROM #REFER_SP_CONTEXT
) X
GROUP BY TABLE_NAME
) TBL
GROUP BY UPPER(TBL.TABLE_NAME)-- 5. 임시 테이블 제거
DROP TABLE #REFER_SP
DROP TABLE #SP_CONTEXT
DROP TABLE #REFER_SP_CONTEXT -
HoyaSoft
2014.10.07 18:32
중복값은 CR(carrige return), NL(next line), TAP 값을 제거하면 사라집니다. ㅎ