Sql server “我如何返回”;“行的其余部分”;当数据存储在表的一行中时?

Sql server “我如何返回”;“行的其余部分”;当数据存储在表的一行中时?,sql-server,tsql,sql-server-2012,Sql Server,Tsql,Sql Server 2012,我有一个疑问: SELECT definition FROM sys.sql_modules WHERE definition like '@noreturns' 这将列出包含字符串的所有对象-但是,我需要返回对象行的其余部分(例如,SP中定义中包含该字符串的行的其余部分) 但这是一个表,那么我如何只返回行的其余部分而不返回整行(在本例中是指定义的其余部分)?? 谢谢您您可以使用sys.syscomments表进行此操作 select OBJECT_NAME(id),

我有一个疑问:

SELECT  definition 
FROM    sys.sql_modules
WHERE definition like '@noreturns'
这将列出包含字符串的所有对象-但是,我需要返回对象行的其余部分(例如,SP中定义中包含该字符串的行的其余部分) 但这是一个表,那么我如何只返回行的其余部分而不返回整行(在本例中是指定义的其余部分)??
谢谢您

您可以使用
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%'

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'   

例如,一个示例输出是:“@noreturns)+29+LTRIM(@Bay)+@RTRIM(@Join)”
sys.syscomments
在一行中获取整个对象,我认为OP需要一个单独的行,因此
sp_helptext
是正确的方法,正如我在回答中所解释的那样。@ahmedabdelqader如果过程编写的格式正确,您将是正确的。我的意思是在同一行上编写虚拟进程并进行测试。你不需要对程序进行任何搜索。您必须知道过程名称。它与我在问题中描述的问题相同:它只提供所有内容,直到结束,因为表中的一行没有“行”的概念。如果过程编写的格式良好,您是对的。我的意思是在同一行上编写虚拟进程并进行测试。你不需要对程序进行任何搜索。你必须知道程序的确切名称。