0

リモート サーバーからデータを抽出するいくつかのストアド プロシージャで使用されるライブラリを確認する必要があります。

私は(SOの助けを借りて、SO 21708681を参照)以下のコードを構築しました:

DECLARE @tProcs TABLE
    (
        procID int IDENTITY,
        procObjectID nvarchar(100),
        procName nvarchar(100)
    );

insert into @tProcs     
SELECT object_id, name 
    FROM sys.objects 
        WHERE  type in (N'P', N'PC') and name like '%_Extract'

declare @countProcs int, @I int=0

select @countProcs=COUNT(*) from @tProcs

while @I<@countProcs
    Begin
        declare @source_code nvarchar(max)
        declare @objectID nvarchar(50)
        declare @proc_Name nvarchar(200)

        select @objectID=procObjectID from @tProcs where procID=@I
        select @proc_Name=procName from @tProcs where procID=@I

        select @source_code = definition
            from sys.sql_modules
            where object_id = @objectID 

        SELECT PATINDEX('BOCTEST.%', @proc_Name) as Pos, @proc_Name 

              -- or SELECT charindex(@source_code, '%BOCTEST%') 

        set @I=@I+1
    End

各ターゲット ストアド プロシージャ内には、次のような行があります。

DECLARE YP040P_cursor CURSOR FOR SELECT * FROM BOCTEST.S653C36C.LIVEBOC_A.YP040P

ストアド プロシージャごとに 'LIVEBOC_A' の部分 ('LIVEBOC_A' または LIVEBOC_B のいずれか) を知る必要があります。

PATINDEX と CHARINDEX を使用して、定義内の文字列の開始 opf の場所を取得しようとしましたが、sysmodules返されるのはゼロか、文字列またはバイナリ データが切り捨てられるというエラーだけです。

4

2 に答える 2

1

試す

SELECT 
    name, 
    table_name = CASE WHEN OBJECT_DEFINITION(OBJECT_ID) LIKE '%BOCTEST.S653C36C.LIVEBOC_A.YP040P%' THEN 'LIVEBOC_A'
                      WHEN OBJECT_DEFINITION(OBJECT_ID) LIKE '%BOCTEST.S653C36C.LIVEBOC_B.YP040P%' THEN 'LIVEBOC_B' END
FROM sys.objects o
WHERE o.[type] IN ('P', 'PC')
AND name like '%_Extract'
于 2014-02-12T12:34:46.977 に答える