2017-10-18 10 views
2

J'ai cette requête:Comment retourner "le reste de la ligne" lorsque les données sont stockées dans une rangée d'une table?

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

Cette liste tous les objets qui contiennent la chaîne - cependant, je dois retourner le reste de la ligne de l'objet (par exemple, le reste de la ligne dans la SP qui contient cette chaîne dans sa définition) Mais ceci est une table, alors comment est-ce que je retournerais juste le reste de la ligne et pas la rangée entière (qui dans ce cas signifie le REST de la définition)? Merci

+0

Pour examen un exemple de sortie serait: "@noreturns) + 29 + LTRIM (@Bay) + @RTRIM (@Join)" – LearnByReading

Répondre

0

Vous pouvez utiliser le tableau sys.syscomments pour cela.

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' obtient un objet entier en une ligne, je pense que le PO a besoin d'une séparation lignes, donc 'sp_helptext' est l'approche correcte comme expliqué dans ma réponse. –

+0

@ahmedabdelqader Si les procédures d'écriture sont bien formatées, vous auriez raison. Je veux dire écrire votre proc factice sur la même ligne et le tester. Et vous ne faites aucune recherche sur les procédures. Vous devez connaître le nom de la procédure. –

+0

En fait, cela n'a pas fonctionné – LearnByReading

0

Insérez la sortie de sp_helptext à table temporaire approche comme suivante: -

insert into #tableName 
exec sp_helptext 'Object_Name' 

Demo: -

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%' 

Résultat: -

print 'This is dummy porcedure' 
+0

si les procédures d'écriture bien formatées vous auriez raison. Je veux dire écrire votre proc factice sur la même ligne et le tester. Et vous ne faites aucune recherche sur les procédures. Vous devez connaître le nom exact de la procédure. –