2009-07-23 6 views
2

나는 현재 주어진 데이터 소스에 대한 SP의 목록을 검색 할MS SQL Server 2005의 sp_stored_procedures

sp_stored_procedures 

저장 프로 시저를 실행 해요. PROCEDURE_NAME 및 PROCEDURE_OWNER 열에 의해이 데이터 집합을 쿼리해야합니다. PROCEDURE_NAME이 (가) 이상한 반환 값을 갖고있는 것으로 보입니다. 이름 끝에 세미콜론과 숫자가 추가 된 것 같습니다.

sel_AppUser;1 
sel_AppUser_all;1 
sel_AppUser_by_login;1 
sel_Browsable;1 

여기

CREATE PROCEDURE [dbo].[sel_Browsable] 
@BrowsableID uniqueidentifier 
AS 
BEGIN 
SELECT * FROM Browsable WHERE browsableID = @BrowsableID FOR XML AUTO, ELEMENTS 
SELECT * FROM Attribute WHERE objectID = @BrowsableID FOR XML AUTO, ELEMENTS 
SELECT * FROM Search WHERE browsableID = @BrowsableID ORDER BY searchOrder FOR XML AUTO, ELEMENTS 
SELECT Attribute.* FROM Attribute INNER JOIN Search ON Attribute.objectID = Search.searchID WHERE browsableID = @BrowsableID ORDER BY searchOrder FOR XML AUTO, ELEMENTS 
SELECT Criterion.* FROM Criterion INNER JOIN Search ON Criterion.searchID = Search.searchID WHERE browsableID = @BrowsableID ORDER BY searchOrder, criterionOrder FOR XML AUTO, ELEMENTS 
SELECT Attribute.* FROM Attribute INNER JOIN Criterion ON Attribute.objectID = Criterion.criterionID INNER JOIN Search ON Criterion.searchID = Search.searchID WHERE browsableID = @BrowsableID ORDER BY searchOrder, criterionOrder FOR XML AUTO, ELEMENTS 
SELECT CriterionOperator.* FROM CriterionOperator INNER JOIN Criterion ON CriterionOperator.criterionID = Criterion.criterionID INNER JOIN Search ON Criterion.searchID = Search.searchID WHERE browsableID = @BrowsableID ORDER BY searchOrder, criterionOrder, operatorOrder FOR XML AUTO, ELEMENTS 
SELECT CriterionValue.* FROM CriterionValue INNER JOIN Criterion ON CriterionValue.criterionID = Criterion.criterionID INNER JOIN Search ON Criterion.searchID = Search.searchID WHERE browsableID = @BrowsableID ORDER BY searchOrder, criterionOrder, criterionValueOrder FOR XML AUTO, ELEMENTS 
END 

가 처음에 내가 (NUM_INPUT_PARAMS는 SQL 서버에서 구현 될 때까지)하지만 추가 한 및 매개 변수를 제거하고 보지 않은이 숫자가 매개 변수의 수를 나타낼 수 있다고 생각 sel_Browsable입니다 목록의 변경.

이 숫자는 무엇을 의미합니까?

답변

2

같은 이름의 다른 저장 프로 시저를 숫자별로 구별하여 한꺼번에 삭제할 수 있습니다. 구문은 SQL 2k8부터 still valid입니다.

; number 같은 이름의 절차를 그룹화하는 데 사용되는 정수 (선택 사항)입니다. 이러한 그룹화 된 절차 은 하나의 DROP PROCEDURE 문을 사용하여 함께 삭제할 수 있습니다. 예를 들어 orders라는 응용 프로그램에서는 orderproc; 1, orderproc, 2 등의 절차를 사용할 수 있습니다. PROCEDURE orderproc 문을 사용하면 전체 그룹이 삭제됩니다. 이름에 으로 구분 된 식별자가 포함되어있는 경우 숫자는 식별자의 일부로 포함되지 않아야합니다. procedure_name 주위의 적절한 구분 기호를 사용하십시오.

이 기능은 official deprecated list에 있습니다.

BTW 카탈로그 뷰를 사용하여 절차를 검색 할 수 있습니다 : sys.procedures. 절차를 사용하는 것보다 훨씬 쉽게보기를 사용합니다.

0

CREATE PROCEDURE에 대한 MSDN 설명서를 참조하십시오. procedure_name에 대한 "Arguments"섹션에서, 그들은 그 종류의 숫자를 더하는 것이 더 이상 사용되지 않는다고 말합니다. 구문 다이어그램에서,; 1은 프로 시저 이름의 일부가 아니며 선택적입니다. 이후; 문자가 T-SQL identifiers에서 합법적이지 않은 경우 이전에 문자열을 볼 수 있습니다. 쿼리 결과.

1

글쎄, 그게 무슨 뜻인지는 모르겠다. 버전 일 수 있겠는가?

하지만 sp_stored_procedures에 대한 대안을 권 해드립니다 :

select specific_schema, specific_name, * from information_schema.routines 

그것은 (무엇보다도) 당신의 이름과 소유자를 제공하고 이상한 문자를 가지고 있지 않습니다.