2017-10-18 119 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

如果程序寫得很好格式化你會是對的。我的意思是在同一行寫你的虛擬程序並測試它。而且你不會對程序進行任何搜索。你必須知道程序的確切名稱。 –

相關問題