> 데이터 베이스 > MySQL 튜토리얼 > MsSQL Find Usages Table Or Stored Procedure

MsSQL Find Usages Table Or Stored Procedure

WBOY
풀어 주다: 2016-06-07 14:56:29
원래의
1557명이 탐색했습니다.

今天在修改數隻(是這個隻還是這個支啊 '_')一、二年前撰寫的storedprocedure(T-SQL)後發現, 要找出這些被異動的SP曾在那些的SP裡面有使用,或者某張資料表在那幾隻SP內使用,這還真是一件苦差事。 此時突然想起Visual Studio 內有個功能叫 FindUsages ,可

今天在修改數隻(是這個"隻"還是這個"支"啊 '_>') 一、二年前撰寫的stored procedure(T-SQL)後發現,

要找出這些被異動的SP曾在那些的SP裡面有使用,或者某張資料表在那幾隻SP內使用,這還真是一件苦差事。

此時突然想起 Visual Studio 內有個功能叫 FindUsages ,可以方便的找出Function 曾在那些程式中使用,

花了一個上午的時間,寫出功能相仿的T-SQL版的 FindUsages

SQL Server
CREATE PROCEDURE [dbo].[sp_FindUsages]
	(@ObjectName SYSNAME)  
AS
BEGIN	
	SET NOCOUNT ON;
	CREATE TABLE #Result([Id] INT IDENTITY, [ObjectName] VARCHAR(100), [Line] INT,[Text] NVARCHAR(max));
	
	DECLARE @Id INT;
	DECLARE @Line INT;
	DECLARE @Name NVARCHAR(1024);


	DECLARE pl CURSOR FOR SELECT [name] FROM sys.procedures;
	OPEN pl;
	FETCH NEXT FROM pl INTO @Name;
	WHILE @@FETCH_STATUS = 0 
	BEGIN		
		EXEC ('INSERT INTO #Result ([Text]) EXEC sp_helptext ' + @Name);
		SET @line = 7;
		DECLARE r CURSOR FOR SELECT Id FROM  #Result WHERE ObjectName IS NULL;	
		OPEN r;
		FETCH NEXT FROM r INTO @Id;
		WHILE @@FETCH_STATUS = 0 
		BEGIN
			SET @Line = @line + 1;
			UPDATE #Result SET Line = @Line,ObjectName = @Name WHERE Id = @id ;
			FETCH NEXT FROM r INTO @Id;
		END 
		CLOSE r;
		DEALLOCATE r;	
		FETCH NEXT FROM pl INTO @Name;
	END 
	CLOSE pl;
	DEALLOCATE pl;
	SELECT * FROM #Result WHERE [Text] LIKE '%' + @ObjectName + '%';
	DROP TABLE #Result;
END


--exec [sp_FindUsages] [spName]
로그인 후 복사
관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿