必须声明标量变量“@@procid”
Must declare the scalar variable "@@procid"
我是 SQL 服务器的新手。我正在尝试创建一个简单的过程来获取当前过程名称的名称以进行调试。
这是代码。
-- ======================================================================
-- 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
当我执行这段代码时,我得到了这个错误。
Msg 137, Level 16, State 1, Line 8
Must declare the scalar variable "@@procid".
不确定我做错了什么。请帮助
更新:
感谢@Larnu 和@David。我正在使用 Azure SQL 数据仓库,我认为这就是原因。我希望以通用方式将此信息传递给另一个过程,而不是对过程名称进行硬编码。
有什么方法可以在 Azure 数据仓库中实现吗?
我认为您可以在开始存储过程时测试相关查询:
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
Azure SQL 数据仓库不支持 @@procid。这已记录在案。
它在 Azure SQL 数据库上运行良好。
我是 SQL 服务器的新手。我正在尝试创建一个简单的过程来获取当前过程名称的名称以进行调试。
这是代码。
-- ======================================================================
-- 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
当我执行这段代码时,我得到了这个错误。
Msg 137, Level 16, State 1, Line 8
Must declare the scalar variable "@@procid".
不确定我做错了什么。请帮助
更新: 感谢@Larnu 和@David。我正在使用 Azure SQL 数据仓库,我认为这就是原因。我希望以通用方式将此信息传递给另一个过程,而不是对过程名称进行硬编码。
有什么方法可以在 Azure 数据仓库中实现吗?
我认为您可以在开始存储过程时测试相关查询:
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
@@procid。这已记录在案。
它在 Azure SQL 数据库上运行良好。