2009-04-03 9 views
12

Czy istnieje sposób w ramach procedura przechowywana, aby odwołać się do własnej nazwy? Powiedzmy, że chcę wydrukować własną nazwę, ale bez twardego kodowania nazwy w procedurze przechowywanej. Czy istnieje jakiś oszust, aby uzyskać nazwę lub identyfikator z samej procedury bez używania rzeczywistej nazwy, aby znaleźć informacje?Czy procedura składowana MS/Transact-SQL wyszukuje własną nazwę?

Odpowiedz

33

Spróbuj:

SELECT OBJECT_NAME(@@PROCID) 

@@ PROCID zwraca identyfikator obiektu bieżącego modułu SQL. OBJECT_NAME tłumaczy identyfikator obiektu na jego nazwę. Oba są dostępne od co najmniej wersji od 7 do 2008 SQL Server.

+0

D'oh! Sekund za późno. Touche! +1 –

+0

+1 Działa na moim komputerze: Przy okazji, czy @@ PROCID działa dla wszystkich wersji SQL Server? Chodzi mi o to, przynajmniej dla SQL Server 2k/2k5/2k8? – Sung

+0

Tak, przynajmniej 2000 w górę. Nie pamiętam, czy to działało 6,5 czy 7: –

14

Szukacie @@ PROCID i OBJECT_NAME tj

select @procName=OBJECT_NAME(@@PROCID) 
+0

Nie ma powodu, dla którego nie powinieneś również uzyskać głosowania na twoją odpowiedź tylko dlatego, że straciłeś sekundę. – TheTXI

+0

Panowie, jestem wzruszony :) –

3

Nazwa proc/func

Select OBJECT_NAME(@@PROCID); 

Inne ciekawe rzeczy

Select * From sys.sysprocesses Where spid = @@SPID 
0

Oto niektóre kodu majstrować Pisałem , działa na bazie danych SQL Server 2005, aby grać z funkcją OBJECT_NAME (@@ PROCID).

Run to pierwszy odcinek, aby utworzyć tabelę dziennika

CREATE TABLE Diagnostics_Log 
    (
    sprocName sysname, 
    WhenRun datetime, 
    Comment Varchar(160) NULL 
) 

- =========================== =============

Następnie uruchom ten T-SQL, aby utworzyć kilka wersji tego samego sproc, dodając za każdym razem przyrostek numeryczny.

CREATE PROC dg_test_name_logging 
    @Comment Varchar(160) 
AS 
    declare @Sprocname sysname 
    select @sprocName = OBJECT_NAME(@@PROCID) 

    PRINT @@PROCID 
    print @sprocname 

    insert into Diagnostics_Log VALUES (@sprocname, GetDate(), @Comment) 

GO 

- ========== Następnie uruchom tę sekcję

exec dg_test_name_logging 'this is the first run' 
WAITFOR DELAY '00:00:00:123' 
    exec dg_test_name_logging1 'this is my second comment' 
WAITFOR DELAY '00:00:00:123' 
    exec dg_test_name_logging2 'yet another comment' 
WAITFOR DELAY '00:00:02:123' 
    exec dg_test_name_logging3 'amazing' 
WAITFOR DELAY '00:00:00:123' 
    exec dg_test_name_logging4 'I''ll be gobsmacked if this works' 
WAITFOR DELAY '00:00:00:123' 
    exec dg_test_name_logging5 'It''s ALIVE !!!' 

    select * from Diagnostics_Log 

może być przydatna do rejestrowania podczas sprocs lub poglądy są prowadzone lub dostępne.

0

sama nazwa_obiektu nie określa schematu bieżącego obiektu. Aby to zrobić:

print object_schema_name(@@PROCID) + '.' + object_name(@@PROCID) 
Powiązane problemy