2017-10-18 81 views
2

我有这个疑问:当数据存储在表的一行时,如何返回“剩余行”?

SELECT definition 
FROM sys.sql_modules 
WHERE definition like '@noreturns' 

这列出了所有包含字符串对象的 - 但是,我需要返回的对象行的其余部分(例如,该行的其余部分在SP在其定义中包含该字符串) 但是,这是一个表,那么我将如何返回该行的其余部分而不是整行(在这种情况下表示定义的REST)? 谢谢

+0

对于考试(@noreturns)+ 29 + LTRIM(@Bay)+ @RTRIM(@Join)“ – LearnByReading

回答

0

您可以使用sys.syscomments表。

select OBJECT_NAME(id), 
     text AllText, 
     SUBSTRING(text, CHARINDEX('MESAJ_LINK',text), CHARINDEX(CHAR(13),text,CHARINDEX('MESAJ_LINK',text)+1)) RestOfTheText 
from 
     sys.syscomments 
where text like '%@noreturns%' 
+0

'sys.syscomments'在一行中获取整个对象,我认为OP需要一个分隔符行,所以'sp_helptext'是正确的方法,正如我在答案中所解释的。 –

+0

@ahmedab​​delqader如果程序写得很好格式化你会是对的。我的意思是在同一行写你的虚拟程序并测试它。而且你不会对程序进行任何搜索。您必须知道过程名称。 –

+0

实际上这不起作用 – LearnByReading

0

将出从sp_helptext到临时表中的下一个步骤: -

insert into #tableName 
exec sp_helptext 'Object_Name' 

演示: -

Create procedure usp_DummyProc 
@param1 int, 
@param2 int 
as 
Begin 
    select @param1 + @param2 as Result 
    print 'This is dummy porcedure' 
End 
go 

Create table #temp (Line varchar(2000)) 

insert into #temp 
exec sp_helptext 'usp_DummyProc' 

/* The Target is selecting the line that contains `print` word, 
so simply use the simple `select` with `where` */ 

select * from #temp 
where Line like '%Print%' 

结果: -

print 'This is dummy porcedure' 
+0

如果程序写得很好格式化你会是对的。我的意思是在同一行写你的虚拟程序并测试它。而且你不会对程序进行任何搜索。你必须知道程序的确切名称。 –

相关问题