2016-05-12 5 views
1
select B.* from sys.sql_modules A 
JOIN SYS.objects B ON A.object_id=B.object_id 
WHERE definition LIKE '%Packages%' 

Ich möchte alle Vorkommen des Wortes 'Pakete' in allen meinen Datenbankergebnissen finden. Ich möchte nur Ergebnisse erhalten, die genau diese "Pakete" haben und nicht andere, die das als Teilstring haben?sql server: Wie findet man eine exakte Übereinstimmung in allen Datenbankobjekten?

Momentan bekomme ich SPs mit 'SPAPacakges' etc, die 'Pakete' als Teilstring haben. Ich möchte diese entfernen.

Wie mache ich das?

SELECT referencing_schema_name, referencing_entity_name, 
referencing_id, referencing_class_desc 
FROM sys.dm_sql_referencing_entities ('dbo.Packages', 'OBJECT'); 

Dies funktioniert für mich. Aber ich bin mir nicht sicher, ob es perfekt ist. Ich verstehe seine vollständige Bedeutung nicht.

Antwort

1

Wenn Sie mit Leerzeichen alle Vorkommen des Wortes Packages, möglicherweise finden wollen, bevor oder nachdem es (dh das Wort selbst in Isolation), dann können Sie den folgenden WHERE Zustand versuchen:

WHERE definition LIKE ' Packages' OR 
     definition LIKE 'Packages ' OR 
     definition LIKE ' Packages ' OR 
     definition LIKE 'Packages' 
+0

Es wird keine Ergebnisse zurück. – maverick

+0

Sie sollten uns auch einige Beispieldaten aus Ihren Tabellen zeigen. –

+0

Meine ursprüngliche gepostete Abfrage gibt mir Ergebnisse mit Wörtern wie 'TC_SoldRSAPackages' zurück. Wenn ich es so modifizierte, wie du es vorgeschlagen hast, gab es keine Ergebnisse. Obwohl ich mehrere SP habe, die Wörter wie "Pakete" haben. – maverick

1

Nur entfernen Platzhalter % von 'Packages' und man konnte LTRIM und RTRIM hinzufügen Probleme mit Leerzeichen zu vermeiden, in der folgenden:

select B.* from sys.sql_modules A 
JOIN SYS.objects B ON A.object_id=B.object_id 
WHERE LTRIM(RTRIM(definition)) LIKE 'Packages' 
+0

Es werden keine Ergebnisse zurückgegeben. – maverick

+0

Funktioniert immer noch nicht – maverick

Verwandte Themen