2009-04-03 6 views
12

Y a-t-il un moyen, dans une procédure stockée, de faire référence à son propre nom? Dites que je veux qu'il imprime son propre nom, mais sans coder en dur le nom dans la procédure stockée. Existe-t-il un moyen tricheur d'obtenir le nom ou l'identifiant à partir de la procédure même sans utiliser le nom réel pour trouver l'information?Une procédure stockée MS/Transact-SQL peut-elle rechercher son propre nom?

Répondre

33

Essayez:

SELECT OBJECT_NAME(@@PROCID) 

@@ PROCID renvoie l'ID d'objet du module SQL en cours. OBJECT_NAME traduit un ID d'objet en son nom. Les deux sont disponibles à partir d'au moins la version 7 à 2008 de SQL Server.

+0

D'oh! Secondes trop tard. Touche! +1 –

+0

+1 Fonctionne sur mon ordinateur: A propos, PROCID fonctionne-t-il pour toutes les versions de SQL Server? Je veux dire, au moins pour SQL Server 2k/2k5/2k8? – Sung

+0

Oui, au moins 2000 vers le haut. Je ne me souviens pas si cela fonctionnait sur 6.5 ou 7. –

14

Vous cherchez @@ PROCID et OBJECT_NAME-à-dire

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

Aucune raison pour laquelle vous ne devriez pas recevoir votre réponse simplement parce que vous avez manqué quelques secondes. – TheTXI

+0

Gents, je suis touché :) –

3

Nom du proc/func

Select OBJECT_NAME(@@PROCID); 

Autres choses intéressantes

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

Voici un code de bricoler je l'ai écrit , s'exécutant sur une base de données SQL Server 2005 pour jouer avec la fonction OBJECT_NAME (@@ PROCID).

Exécutez cette première section, pour créer une table de journal

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

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

Ensuite, exécutez ce T-SQL pour créer quelques versions du même sproc, en ajoutant un suffixe numérique à chaque fois.

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 

- ========== Lancez ensuite cette section

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 

pourrait être utile pour l'enregistrement lorsque sprocs ou vues sont exécutées ou accessibles.

0

nom_objet() ne spécifie pas lui-même le schéma de l'objet actuel. Pour ce faire:

print object_schema_name(@@PROCID) + '.' + object_name(@@PROCID) 
Questions connexes