sql >> データベース >  >> RDS >> Sqlserver

SQL Serverでは、列が参照されているすべての場所を見つけるにはどうすればよいですか?

    警告: これはテキスト検索方法ですが、共有するスクリプトによって、多くの時間を節約できました。 。内部を検索します:

    • スカラー関数
    • テーブル値関数
    • ストアドプロシージャ
    • ビュー
    • トリガー

    照合を指定して機能させる必要がありました。

    SELECT
        sys.objects.object_id, 
        sys.schemas.name AS [Schema], 
        sys.objects.name AS Object_Name, 
        sys.objects.type_desc AS [Type]
    FROM sys.sql_modules (NOLOCK) 
    INNER JOIN sys.objects (NOLOCK) ON sys.sql_modules.object_id = sys.objects.object_id 
    INNER JOIN sys.schemas (NOLOCK) ON sys.objects.schema_id = sys.schemas.schema_id
    WHERE
        sys.sql_modules.definition COLLATE SQL_Latin1_General_CP1_CI_AS LIKE '%{Column Name}%' ESCAPE '\'
    ORDER BY sys.objects.type_desc, sys.schemas.name, sys.objects.name
    

    出力は次のようになります:

    更新 :特定のテーブルやSPなどを検索する必要がある場合は、より特殊なクエリを使用できます:

    DECLARE @SCHEMA_NAME VARCHAR(100) = 'dbo';
    DECLARE @OBJECT_NAME VARCHAR(100) = 'MY_OBJECT';
    
    SELECT
        sys.objects.object_id,
        sys.schemas.name AS [Schema], 
        sys.objects.name AS Object_Name, 
        sys.objects.type_desc AS [Type]
    FROM sys.sql_modules (NOLOCK) 
    INNER JOIN sys.objects (NOLOCK) ON sys.sql_modules.object_id = sys.objects.object_id 
    INNER JOIN sys.schemas (NOLOCK) ON sys.objects.schema_id = sys.schemas.schema_id
    WHERE
        (
               '#' + sys.sql_modules.definition + '#' COLLATE SQL_Latin1_General_CP1_CI_AS LIKE '%[^a-z_]'[email protected]_NAME+'.'[email protected]_NAME+'[^a-z_]%' ESCAPE '\'
            OR '#' + sys.sql_modules.definition + '#' COLLATE SQL_Latin1_General_CP1_CI_AS LIKE '%[^a-z_]\['[email protected]_NAME+'\].'[email protected]_NAME+'[^a-z_]%' ESCAPE '\'
            OR '#' + sys.sql_modules.definition + '#' COLLATE SQL_Latin1_General_CP1_CI_AS LIKE '%[^a-z_]'[email protected]_NAME+'.\['[email protected]_NAME+'\][^a-z_]%' ESCAPE '\'
            OR '#' + sys.sql_modules.definition + '#' COLLATE SQL_Latin1_General_CP1_CI_AS LIKE '%[^a-z_]\['[email protected]_NAME+'\].\['[email protected]_NAME+'\][^a-z_]%' ESCAPE '\'
        )
    ORDER BY sys.objects.type_desc, sys.schemas.name, sys.objects.name
    

    追記 :どちらのクエリもコメント内を検索します。



    1. メモリ/ストレージテクノロジ階層とSQLServer

    2. postgresqlはギャップのないシーケンスを生成します

    3. SQL ServerでCHECK制約が列レベルかテーブルレベルかを確認します(T-SQLの例)

    4. PythonはMySQLのプリペアドステートメントをサポートしていますか?