Welcome to Sign in | Help
in Search

Triggere SQL Server (RONUA)

Last post 12-21-2006, 10:52 PM by rsocol. 5 replies.
Sort Posts: Previous Next
  •  12-20-2006, 2:02 PM 1397

    Triggere SQL Server (RONUA)

     
    matincaf wrote the following post at 12-18-2006 7:22 :
    Salut,

    Cum se poate obţine printr-un script sql codul unui trigger de pe un tabel ?

    Mulţumesc.

    Cristian Andrei Lefter, SQL Server MVP
    MCT, MCSA, MCDBA, MCAD, MCSD .NET,
    MCTS, MCITP - Database Administrator SQL Server 2005
    http://sqlserver.ro
    Filed under:
  •  12-20-2006, 2:09 PM 1398 in reply to 1397

    Re: Triggere SQL Server (RONUA)

    Un posibil raspuns este folosind OBJECT_DEFINITION:

    USE AdventureWorks;
    GO
    SELECT
    OBJECT_DEFINITION (OBJECT_ID(N'HumanResources.dEmployee')) AS [Trigger Definition];
    GO

    For all triggers of a table:

    USE AdventureWorks;
    GO
    SELECT
    [name] as TiggerName,
    OBJECT_DEFINITION([object_id]) AS [Trigger Definition]
    FROM sys.triggers
    WHERE parent_id=OBJECT_ID(N'Purchasing.PurchaseOrderDetail');


    Cristian Andrei Lefter, SQL Server MVP
    MCT, MCSA, MCDBA, MCAD, MCSD .NET,
    MCTS, MCITP - Database Administrator SQL Server 2005
    http://sqlserver.ro
  •  12-20-2006, 2:20 PM 1399 in reply to 1398

    Re: Triggere SQL Server (RONUA)

    Un altul ar fi :

    select text from syscomments

    where id in (select id from sysobjects where name='uDepartment') 

    daca va intereseaza triggerul uDepartment din tabela HumanResources.Department din baza de date

    AdventureWorks 


    Gheorghe Ciubuc,SQL Server Influencer, MCP(SQL 2000), MCTS (SQL Server 2005) , OCA(Oracle 9i), Sybase(Brainbench)
  •  12-20-2006, 3:35 PM 1403 in reply to 1399

    Re: Triggere SQL Server (RONUA)

    ggciubuc:

    Un altul ar fi :

    select text from syscomments where id in (select id from sysobjects where name='uDepartment') 

    Pentru metoda asta e o mică problemă atunci când trigger-ul are mai mult de 4K, pentru că textul va fi returnat în mai multe înregistrări, iar sfârşitul unei înregistrări poate fi chiar în mijlocul unui cuvânt.

    Iar a treia soluţie ar fi:

    exec sp_helptext 'numetrigger'

    Aceasta metodă returnează fiecare linie într-o înregistrare separată. Totuși nici aici nu e chiar perfect, pentru că liniile returnate sunt de maxim 255 de caractere, deci și aici e neplăcut dacă există linii mai lungi de atât, pentru că vor fi returnate în înregistrări separate.

    Cel mai bine e să se folosească soluția scrisă de Cristi (cu OBJECT_DEFINITION), dar aceasta nu este disponibilă pe SQL 2000 (e o funcție nouă introdusă în SQL 2005).

    Răzvan

  •  12-21-2006, 9:06 PM 1418 in reply to 1397

    Re: Triggere SQL Server (RONUA)

    Tot pe SQL 2005 merge si:

    USE AdventureWorks 

    SELECT m.[object_id], m.definition
    FROM sys.sql_modules m JOIN sys.triggers t
    ON m.[object_id] = t.[object_id]
    WHERE m.[object_id] = OBJECT_ID(N'Production.uUnitMeasure')

    Din pacate QA "arata" rezultatul trunchiat, chiar daca il exporti intr-un fisier...deci sp_helptext e mai comod daca vrei sa citesti textul in QA, fara alte "ocoluri"... 

    ** Production.uUnitMeasure e numele unui trigger din schema Production

    ** Pentru a vedea definitia triggerului, iti trebuie permisiunea "VIEW DEFINITION" pe schema "Production" (de exemplu) sau sa ai o permisiune (CONTROL, ALTER, TAKE OWNERSHIP) pe obiect, sau sa fii "owner"-ul obiectului...

     

     

  •  12-21-2006, 10:52 PM 1419 in reply to 1418

    Re: Triggere SQL Server (RONUA)

    Pentru problema cu trunchierea textului în Management Studio (sau în Query Analyzer), se poate configura de la Options / Query Results / SQL Server / Results to text / Maximum number of characters displayed in each column (nu mai ţin minte exact unde e opţiunea din Query Analyzer, dar e ceva similar), mărind valoarea respectivă de la 256 la 8192. Totuşi, dacă trigger-ul are o dimensiune mai mare decât atât, ar trebui folosită altă metodă.

    Răzvan

View as RSS news feed in XML
Powered by Community Server (Commercial Edition), by Telligent Systems