piektdiena, 2011. gada 2. decembris

Kā uzzināt SQL Server procedūras nosaukumu?

Protams, rakstot procedūru mēs lieliski zinām, kā sauc procedūru. Bet kā izveidot kodu, kas pats atpazīst procedūru (vai funkciju, trigeri), no kuras tas tiek izsaukts?

Risinājums ir tāds, ka var izmantot SQL Server iebūvēto metadatu funkciju @@PROCID. Izskatās visai glīti:
Create Proc dbo.TestProc
As
Begin
    Print OBJECT_NAME(@@PROCID)
    Print OBJECT_SCHEMA_NAME(@@PROCID) + '.' + OBJECT_NAME(@@PROCID)
End
Izpildes rezultāts:


[Papildināts] vēl neliela piebilde par kļūdu apstrādi. Catch blokā ir pieejama funkcija ERROR_PROCEDURE, kas arī atgriež procederūras nosaukumu. Atšķirība ir tā, ka atgriež nosaukumu tai procedūrai, kurā radās kļūda.
Lūk arī piemērs:
Create Proc dbo.ProcRadaKludu
As
Begin
    RAISERROR ('Mākslīga kļūda', 16, 11);
End
Go
Create Proc dbo.ProcErr
As
Begin
    Begin Try
        Exec dbo.ProcRadaKludu
    End Try
    Begin Catch
        Print '@@ProcID: ' +  OBJECT_NAME(@@PROCID)
        Print 'Error_Procedure(): ' + Error_Procedure()
    End Catch
End
Izsaucot dbo.ProcErr, tiek izsaukta procedūra, kas rada kļūdu- dbo.ProcRadaKludu. Catch blokā tiek šī kļūda noķerta. Tur arī var redzēt atšķirības starp @@PROCID un Error_Procedure():

Nav komentāru:

Komentāra publicēšana