[sql] SQL Server의 저장 프로 시저에서 텍스트 검색

모든 데이터베이스 저장 프로 시저에서 텍스트를 검색하고 싶습니다. 아래 SQL을 사용합니다.

SELECT DISTINCT
       o.name AS Object_Name,
       o.type_desc
  FROM sys.sql_modules m
       INNER JOIN
       sys.objects o
         ON m.object_id = o.object_id
 WHERE m.definition Like '%[ABD]%';

[ABD]대괄호를 포함한 모든 저장 프로 시저에서 검색하고 싶지만 올바른 결과를 제공하지 않습니다. 이를 위해 쿼리를 어떻게 변경할 수 있습니까?



답변

대괄호를 피하십시오.

...
WHERE m.definition Like '%\[ABD\]%' ESCAPE '\'

그러면 대괄호는 와일드 카드가 아닌 문자열 리터럴로 취급됩니다.


답변

이 요청을 시도하십시오 :

질문

SELECT name
FROM   sys.procedures
WHERE  Object_definition(object_id) LIKE '%strHell%'


답변

검색을 위해 타사 도구를 사용해 보셨습니까? 무료로 사용할 수 있고 과거에 많은 시간을 절약 할 수있는 몇 가지가 있습니다.

아래는 제가 성공적으로 사용한 SSMS Addins 두 가지입니다.

ApexSQL 검색 – 데이터베이스에서 스키마와 데이터를 모두 검색하며 종속성 추적 등과 같은 추가 기능이 있습니다.

SSMS 도구 팩 – 이전 기능과 다른 멋진 기능과 동일한 검색 기능이 있습니다. SQL Server 2012에는 무료가 아니지만 여전히 저렴합니다.

나는이 답변이 질문과 100 % 관련이 없다는 것을 알고 있지만 (다른 사람들이) 이것이 유용 할 것으로 기대합니다.


답변

나는 보통 그것을 달성하기 위해 다음을 실행합니다.

select distinct object_name(id)
from syscomments
where text like '%[ABD]%'
order by object_name(id) 


답변

SQL Server를 사용하는 것이 좋습니다.

아래 저장 프로 시저를 만들고 짧은 키를 설정하십시오.

CREATE PROCEDURE [dbo].[Searchinall]
(@strFind AS VARCHAR(MAX))
AS
BEGIN
    SET NOCOUNT ON;
    --TO FIND STRING IN ALL PROCEDURES        
    BEGIN
        SELECT OBJECT_NAME(OBJECT_ID) SP_Name
              ,OBJECT_DEFINITION(OBJECT_ID) SP_Definition
        FROM   sys.procedures
        WHERE  OBJECT_DEFINITION(OBJECT_ID) LIKE '%'+@strFind+'%'
    END

    --TO FIND STRING IN ALL VIEWS        
    BEGIN
        SELECT OBJECT_NAME(OBJECT_ID) View_Name
              ,OBJECT_DEFINITION(OBJECT_ID) View_Definition
        FROM   sys.views
        WHERE  OBJECT_DEFINITION(OBJECT_ID) LIKE '%'+@strFind+'%'
    END

    --TO FIND STRING IN ALL FUNCTION        
    BEGIN
        SELECT ROUTINE_NAME           Function_Name
              ,ROUTINE_DEFINITION     Function_definition
        FROM   INFORMATION_SCHEMA.ROUTINES
        WHERE  ROUTINE_DEFINITION LIKE '%'+@strFind+'%'
               AND ROUTINE_TYPE = 'FUNCTION'
        ORDER BY
               ROUTINE_NAME
    END

    --TO FIND STRING IN ALL TABLES OF DATABASE.    
    BEGIN
        SELECT t.name      AS Table_Name
              ,c.name      AS COLUMN_NAME
        FROM   sys.tables  AS t
               INNER JOIN sys.columns c
                    ON  t.OBJECT_ID = c.OBJECT_ID
        WHERE  c.name LIKE '%'+@strFind+'%'
        ORDER BY
               Table_Name
    END
END

자-아래처럼 단축키를 설정하십시오.

여기에 이미지 설명을 입력하십시오

다음에 그래서 당신은 같은 네 개의 개체 중 하나에서 특정 텍스트를 찾을 할 때마다 Store procedure, Views, FunctionsTables. 해당 키워드를 작성하고 바로 가기 키를 누르면됩니다.

예를 들어 ‘PaymentTable’을 검색 한 다음 ‘PaymentTable’을 작성하고 쿼리 편집기에서 작성된 키워드를 선택하거나 강조 표시하고 바로 가기 키를 누르면 ctrl+4전체 결과가 제공됩니다.


답변

Redgate의 SQL 검색 은이를 수행하기위한 훌륭한 도구이며 SSMS를위한 무료 플러그인입니다.


답변

이것을 “더러운”대안으로 사용하십시오. 그러나 이것은 특히 DB 프로젝트에 익숙하지 않을 때 많은 시간을 절약했습니다. 때로는 모든 SP 내에서 문자열을 검색하려고 할 때 관련 논리 중 일부가 함수와 트리거 사이숨겨져 있거나 생각과 다르게 다르게 표현 될 수 있다는 것을 잊어 버리 십시오.

MSSMS에서 DB를 마우스 오른쪽 단추로 클릭하고 Tasks -> Generate Scripts마법사를 선택
하여 모든 SP, Fns 및 트리거를 단일 .sql 파일로 출력 할 수 있습니다.

여기에 이미지 설명을 입력하십시오

트리거도 선택하십시오!

여기에 이미지 설명을 입력하십시오

그런 다음 Sublime 또는 Notepad사용 하여 찾을 문자열을 검색 하십시오 . 나는 이것이 매우 비효율적이며 편집증 적 인 접근법 일 수 있음을 알고 있지만 작동합니다 🙂