none
Trigger auslesen RRS feed

  • Frage

  • Hallo,
    ich habe eine SQL Server Datenbank mit Triggern.
    Nun will ich per Programm meinen Trigger auslesen, und ändern.
    Wie ich einen Trigger ändere ist mir klar, jedoch muss in in meinem C#
    Programm wissen, was in dem Trigger steht.
    Gibt es so etwas wie
    Select * from Triggername?

    Ich muss den Trigger analysieren und dann entsprechend ändern.


    Bin für jede Info dankbar.
    Gruß
    Thomas
    Mittwoch, 19. Mai 2010 09:31

Antworten

  • Ein Weg wäre zum Beispiel

    SELECT OBJECT_DEFINITION(OBJECT_ID('your_trigger_name'))


    -- Frank Kalis Microsoft SQL Server MVP Webmaster: http://www.insidesql.org
    Mittwoch, 19. Mai 2010 10:12
  • Funktioniert prima, wenn man den Triggernamen kennt.
    Sonst kann man auch den Ansatz, den ich im gleichen Thread in der NG gepostet habe verwenden:
     
    select ta.name, t.name, c.definition
    from sys.triggers t
    inner join sys.tables ta
    on t.parent_id = ta.object_id
    inner join sys.sql_modules c
    on t.object_id = c.object_id
    where ta.name = 'TabelleTest'
    and t.name = 'TriggerTest' ;

    Einen schönen Tag noch,
    Christoph
    --
    Microsoft SQL Server MVP
    http://www.insidesql.org
    Mittwoch, 19. Mai 2010 10:47
  • Oje, wenn Du diese Versionen noch unterstützen musst, funktioniert sowohl Christoph's als auch mein Vorschlag nicht. Für diese Versionen kannst Du sp_helptext 'TriggerName' verwenden. Der aktuelle Code des Triggers befindet sich in der syscomments Tabelle. Bei sehr umfangreichen Triggern kann der Code mehrere Zeilen umfassen, da der verwendete Datentyp is nvarchar(4000) ist, wenn ich mich richtig erinnere.

    -- Frank Kalis Microsoft SQL Server MVP Webmaster: http://www.insidesql.org
    Mittwoch, 19. Mai 2010 18:57

Alle Antworten

  • Ein Weg wäre zum Beispiel

    SELECT OBJECT_DEFINITION(OBJECT_ID('your_trigger_name'))


    -- Frank Kalis Microsoft SQL Server MVP Webmaster: http://www.insidesql.org
    Mittwoch, 19. Mai 2010 10:12
  • Funktioniert prima, wenn man den Triggernamen kennt.
    Sonst kann man auch den Ansatz, den ich im gleichen Thread in der NG gepostet habe verwenden:
     
    select ta.name, t.name, c.definition
    from sys.triggers t
    inner join sys.tables ta
    on t.parent_id = ta.object_id
    inner join sys.sql_modules c
    on t.object_id = c.object_id
    where ta.name = 'TabelleTest'
    and t.name = 'TriggerTest' ;

    Einen schönen Tag noch,
    Christoph
    --
    Microsoft SQL Server MVP
    http://www.insidesql.org
    Mittwoch, 19. Mai 2010 10:47
  • Womit wir mal wieder beim lustigen Requirements-Raten wären... :-)

    -- Frank Kalis Microsoft SQL Server MVP Webmaster: http://www.insidesql.org
    Mittwoch, 19. Mai 2010 10:57
  • Perfekt, danke

    Thomas

     

    Mittwoch, 19. Mai 2010 14:42
  • Hallo,

    leider doch noch nicht perfekt.

    Geht das ganze auch auf SQL Server 2000 und SQL Server 7?

     

    Thomas

     

    Mittwoch, 19. Mai 2010 15:27
  • Oje, wenn Du diese Versionen noch unterstützen musst, funktioniert sowohl Christoph's als auch mein Vorschlag nicht. Für diese Versionen kannst Du sp_helptext 'TriggerName' verwenden. Der aktuelle Code des Triggers befindet sich in der syscomments Tabelle. Bei sehr umfangreichen Triggern kann der Code mehrere Zeilen umfassen, da der verwendete Datentyp is nvarchar(4000) ist, wenn ich mich richtig erinnere.

    -- Frank Kalis Microsoft SQL Server MVP Webmaster: http://www.insidesql.org
    Mittwoch, 19. Mai 2010 18:57
  • Danke,

    jetzt (hoffentlich-:) alles perfekt!


    Thomas

    Donnerstag, 20. Mai 2010 06:37