如何解决从存储的proc定义中提取字符串
尝试
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'
解决方法
我需要检查几个从远程服务器提取数据的存储过程使用的库。
我已经构建了以下代码:
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
在每个目标存储的proc内都有这样的一行:
DECLARE YP040P_cursor CURSOR FOR SELECT * FROM BOCTEST.S653C36C.LIVEBOC_A.YP040P
我需要为每个存储的proc知道部分“ LIVEBOC_A”(可以是“ LIVEBOC_A”或LIVEBOC_B)
我试图使用PATINDEX和CHARINDEX来获取该字符串在定义中的起始opf的位置,sysmodules
但是我得到的只是零,或者是字符串或二进制数据将被截断的错误。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。