Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

Try:

SELECT OBJECT_NAME(@@PROCID)

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

Ответ 2

Вы ищете @@PROCID и OBJECT_NAME i.e.

select @procName=OBJECT_NAME(@@PROCID)

Ответ 3

Название proc/func

Select OBJECT_NAME(@@PROCID);

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

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

Ответ 4

Вот код, который я написал, работая с базой данных 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' ALIVE !!!'

  select * from Diagnostics_Log

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

Ответ 5

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

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