Может ли хранимая процедура MS / Transact-SQL искать свое собственное имя? - PullRequest
13 голосов
/ 03 апреля 2009

Есть ли какой-либо способ в хранимой процедуре для ссылки на свое имя? Скажем, я хочу напечатать свое собственное имя, но без жесткого кодирования имени в хранимой процедуре. Есть ли какой-нибудь мошеннический способ получить имя или идентификатор из самой процедуры, не используя фактическое имя для поиска информации?

Ответы [ 5 ]

34 голосов
/ 03 апреля 2009

Попробуйте:

SELECT OBJECT_NAME(@@PROCID)

@@ PROCID возвращает идентификатор объекта текущего модуля SQL. OBJECT_NAME переводит идентификатор объекта в его имя. Оба доступны по крайней мере с версии 7 до 2008 SQL Server.

15 голосов
/ 03 апреля 2009

Вы ищете @@ PROCID и OBJECT_NAME, т. Е.

select @procName=OBJECT_NAME(@@PROCID)
3 голосов
/ 03 апреля 2009

Название proc / func

Select OBJECT_NAME(@@PROCID);

Другие интересные вещи

 Select * From sys.sysprocesses Where spid = @@SPID
0 голосов
/ 19 мая 2016

имя_объекта () само по себе не указывает схему текущего объекта. Для этого:

print object_schema_name(@@PROCID) + '.' + object_name(@@PROCID)
0 голосов
/ 07 мая 2009

Вот некоторый код, который я написал, работающий с базой данных SQL Server 2005 для работы с функцией OBJECT_NAME (@@ PROCID).

Сначала запустите этот раздел, чтобы создать таблицу журнала

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

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

Затем запустите этот T-SQL, чтобы создать несколько версий одного и того же sproc, добавляя числовой суффикс каждый раз.

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

- ========== Затем запустите этот раздел

 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

Может быть полезно для регистрации при запуске или доступе к sprocs или представлениям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...