2016-10-11 5 views
2

""内の正確なテキストのプロシージャとトリガで検索できます。 しかし、私は、すべてのデータベース内のすべてのフレーズを%%内の文字列を検索する必要がMS SQL Serverのすべてのデータベースオブジェクトでテキストを検索する方法

+0

"正確なテキストを検索することができるプロシージャとファンクション内"を意味するのかどうかは不明です。正確な手順と関数を検索できますテキスト "....どちらにしても、探しているキーワードは「好き」 –

答えて

0
SELECT ROUTINE_TYPE,* FROM INFORMATION_SCHEMA.ROUTINES WHERE 
CHARINDEX('test',ROUTINE_DEFINITION)>0 

SELECT VIEW_DEFINITION,* FROM INFORMATION_SCHEMA.VIEWS WHERE 
CHARINDEX('test',VIEW_DEFINITION)>0 

SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE 
(CHARINDEX('col1',COLUMN_NAME)>0 OR CHARINDEX('tab2',TABLE_NAME)>0) 

我々がCHARINDEXを使用検索のパフォーマンスを向上させる

3
select * from sys.sql_modules 
where definition like '%test%' 

オブジェクトSYS.SQL_Modules

に関するいくつかの情報は、SQL言語定義である各オブジェクトの行を返しますSQL Serverのモジュール。ネイティブにコンパイルされたスカラーユーザー定義関数も含まれます。 P、RF、V、TR、FN、IF、TF、およびRのオブジェクトには、SQLモジュール

があり、sp_msfporeachDBを使用すると、すべてのデータベースでテストできます。

EXECUTE master.sys.sp_MSforeachdb 'USE [?]; 

if db_id()>4' 
Begin 
select * from sys.sql_modules where defintion like ''%test%'' 
end 
-1

これは重複して質問です...答えはここにある...代わりに( '%テスト%' など)パーセンタイルとのようなオペレータの How to find a string inside a entire database?

DECLARE @MyValue NVarChar(4000) = 'something'; 

    SELECT S.name SchemaName, T.name TableName 
    INTO #T 
    FROM sys.schemas S INNER JOIN 
     sys.tables T ON S.schema_id = T.schema_id; 

    WHILE (EXISTS (SELECT * FROM #T)) BEGIN 
     DECLARE @SQL NVarChar(4000) = 'SELECT * FROM $$TableName WHERE (0 = 1) '; 
     DECLARE @TableName NVarChar(1000) = (
     SELECT TOP 1 SchemaName + '.' + TableName FROM #T 
    ); 
     SELECT @SQL = REPLACE(@SQL, '$$TableName', @TableName); 

     DECLARE @Cols NVarChar(4000) = ''; 

     SELECT 
     @Cols = COALESCE(@Cols + 'OR CONVERT(NVarChar(4000), ', '') + C.name + ') = CONVERT(NVarChar(4000), ''$$MyValue'') ' 
     FROM sys.columns C 
     WHERE C.object_id = OBJECT_ID(@TableName); 

     SELECT @Cols = REPLACE(@Cols, '$$MyValue', @MyValue); 
     SELECT @SQL = @SQL + @Cols; 

     EXECUTE(@SQL); 

     DELETE FROM #T 
     WHERE SchemaName + '.' + TableName = @TableName; 
    END; 

    DROP TABLE #T; 
+1

ここでは「テキストのように」(%%)ではなく正確なテキストを検索できます。そのようにしたいです –

+1

答えをありがとう –

関連する問題