必须声明标量变量“ @@ procid”

时间:2019-01-10 18:22:24

标签: sql-server azure-sql-database azure-sqldw

我刚接触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。我正在使用Azure SQL数据仓库,我认为这就是原因。我希望将此信息以通用方式传递给另一个过程,而不是对过程名称进行硬编码。

Azure数据仓库中有什么方法吗?

2 个答案:

答案 0 :(得分:1)

我认为您可以从存储过程开始就测试相关查询:

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

答案 1 :(得分:1)

Azure SQL数据仓库不支持

@@procid。已记录。

它在Azure SQL数据库上正常工作。