Должен объявить скалярную переменную "@@ procid" - PullRequest
0 голосов
/ 10 января 2019

Я довольно новичок в SQL Server. Я пытаюсь создать простую процедуру, чтобы получить имя текущего имени процедуры для целей отладки.

Это код.

-- ======================================================================
-- Create Stored Procedure Template for Azure SQL Data Warehouse Database
-- ======================================================================
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [stg].[test_procid]
AS
BEGIN
    DECLARE @objectname VARCHAR(200);
    SET @objectname = QUOTENAME(object_schema_name(@@procid)) + '.' + QUOTENAME(object_name(@@procid));
END
GO

Когда я выполняю этот код, я получаю эту ошибку.

Сообщение 137, Уровень 16, Состояние 1, Строка 8
Необходимо объявить скалярную переменную "@@ procid".

Не уверен, что я делаю не так. Пожалуйста, помогите

Обновление: Спасибо @Larnu и @David. Я использую хранилище данных SQL Azure и думаю, что в этом причина. Я хочу, чтобы эта информация передавалась другой процедуре общим способом, нежели жесткое кодирование имени процедуры.

Есть ли способ сделать это в хранилище данных Azure?

Ответы [ 2 ]

0 голосов
/ 11 января 2019

@@ procid не поддерживается в хранилище данных SQL Azure. Это задокументировано.

Отлично работает в базе данных SQL Azure.

0 голосов
/ 10 января 2019

Я думаю, что вы можете проверить соответствующий запрос, начиная с хранимой процедуры:

select object_name(objectid) from sys.dm_Exec_requests ec cross apply sys.dm_exec_sql_text(ec.sql_handle) where session_id=@@spid

@@ spid: https://docs.microsoft.com/fr-fr/sql/t-sql/functions/spid-transact-sql?view=sql-server-2017

Обновление:

select object_name(objectid) from sys.dm_Exec_requests AS EC cross apply sys.dm_exec_sql_text(EC.sql_handle) where session_id=@@spid
...