[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
, Functions
와 Tables
. 해당 키워드를 작성하고 바로 가기 키를 누르면됩니다.
예를 들어 ‘PaymentTable’을 검색 한 다음 ‘PaymentTable’을 작성하고 쿼리 편집기에서 작성된 키워드를 선택하거나 강조 표시하고 바로 가기 키를 누르면 ctrl+4
전체 결과가 제공됩니다.
답변
Redgate의 SQL 검색 은이를 수행하기위한 훌륭한 도구이며 SSMS를위한 무료 플러그인입니다.
답변
이것을 “더러운”대안으로 사용하십시오. 그러나 이것은 특히 DB 프로젝트에 익숙하지 않을 때 많은 시간을 절약했습니다. 때로는 모든 SP 내에서 문자열을 검색하려고 할 때 관련 논리 중 일부가 함수와 트리거 사이 에 숨겨져 있거나 생각과 다르게 다르게 표현 될 수 있다는 것을 잊어 버리 십시오.
MSSMS에서 DB를 마우스 오른쪽 단추로 클릭하고 Tasks -> Generate Scripts
마법사를 선택
하여 모든 SP, Fns 및 트리거를 단일 .sql 파일로 출력 할 수 있습니다.
트리거도 선택하십시오!
그런 다음 Sublime 또는 Notepad 를 사용 하여 찾을 문자열을 검색 하십시오 . 나는 이것이 매우 비효율적이며 편집증 적 인 접근법 일 수 있음을 알고 있지만 작동합니다 🙂