我刚接触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数据仓库中有什么方法吗?
答案 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)
@@procid。已记录。
它在Azure SQL数据库上正常工作。