2017-06-11 4 views
0

Ich habe eine CLR-gespeicherte Prozedur geschrieben (um E-Mails zu senden und nicht von DatabaseMail abhängig, da mir gesagt wurde, dass es sicherer ist).Die Definition einer gespeicherten CLR-Prozedur abrufen

Es funktioniert wie erwartet. Die Sache, die ich jetzt lernen möchte, ist, wie man die Definition von einem CLR-Objekt erhält (CLR SP, CLR-Skalarfunktion, usw.).

ich schon versucht, mit:

  • sys.sql_modules,

  • sys.system_sql_modules,

  • OBJECT_DEFINITION()

Aber es gibt eine Null-Definition .

Gibt es eine andere Möglichkeit, die Definition eines CLR-Objekts zu erhalten?

+0

Wenn Sie es geschrieben haben, haben Sie den Quellcode. Was versuchst du zu machen? –

+0

@BenThul Nicht viel, wirklich; Ich versuche nur so viel wie möglich zu lernen. Ich lerne SQL CLR selbst, also fand ich es seltsam, wenn ich sys.sql_modules auf der Suche nach einer Skalarfunktion (der SQL) prüfte, und ich bemerkte, dass dort nichts über CLR-Objekte war. Was zu der Frage führte, ob es tatsächlich möglich war, es zu bekommen. – soulblazer

+0

@soulblazer Ich habe gerade meine Antwort aktualisiert, um einen Punkt zu verdeutlichen, und einen Link zu einer Reihe von Artikeln hinzugefügt, die ich schreibe, um Leuten zu helfen, mit SQLCLR zu arbeiten :-). –

Antwort

1

SQLCLR-Objekte haben keinen T-SQL-Code, daher ist nichts zu speichern, das mithilfe der integrierten Funktion sys.* _sql_modules DMVs oder OBJECT_DEFINITION() abgerufen werden kann.

Wenn Sie den zugrunde liegenden .NET-Code möchten, das ist in der Assembly, die gefunden wird: sys.assembly_files.

SELECT * 
FROM sys.assembly_files 
WHERE [file_id] = 1; 

Wenn Sie nicht den Quellcode haben, kann dieser durch Zerlegen der Baugruppe extrahiert werden.

Wenn Sie die CREATE PROCEDURE ... AS EXTERNAL NAME ... ; Anweisung wollen, dann müssen das wäre aus mehreren DMVs zusammen genäht werden: sys.assembly_modules, sys.types, sys.parameters, sys.columns. Sie müssten auch die integrierten Funktionen OBJECT_NAME und OBJECT_SCHEMA_NAME verwenden. Wenn Sie versuchen, eine CREATE TYPE-Anweisung neu zu erstellen, müssen Sie die sys.assembly_types DMV überprüfen.

Weitere Informationen zum Arbeiten mit SQLCLR im Allgemeinen finden Sie in der Artikelserie, die ich zu diesem Thema in SQL Server Central verfasse: Stairway to SQLCLR (zum Lesen des Inhalts ist eine kostenlose Registrierung erforderlich).

Verwandte Themen