You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Synapse专用SQL池:不硬编码获取当前存储过程的object_id

在Azure Synapse专用SQL池中获取当前存储过程的Object ID

Azure Synapse专用SQL池不支持SQL Server中的@@PROCID系统变量,要避免硬编码存储过程名称来获取object_id,可以通过查询系统视图结合字符串解析实现,具体方案如下:

实现代码

DECLARE @current_proc_id INT;

SELECT @current_proc_id = p.object_id
FROM sys.dm_pdw_exec_requests req
CROSS APPLY (
    SELECT
        -- 从执行的SQL文本中提取存储过程的完整标识符
        LTRIM(RTRIM(
            SUBSTRING(req.sql_text,
                CHARINDEX('CREATE PROCEDURE', req.sql_text) + 16,
                CHARINDEX(' ', req.sql_text, CHARINDEX('CREATE PROCEDURE', req.sql_text) + 16)
                - (CHARINDEX('CREATE PROCEDURE', req.sql_text) + 16)
            )
        )) AS full_proc_name
) AS proc_info
JOIN sys.procedures p
    ON p.name = PARSENAME(proc_info.full_proc_name, 1)
    AND SCHEMA_NAME(p.schema_id) = PARSENAME(proc_info.full_proc_name, 2)
WHERE req.session_id = SESSION_ID()
    AND req.status = 'Running'
    AND req.sql_text LIKE '%CREATE PROCEDURE%';

-- 输出结果或用于后续逻辑
SELECT @current_proc_id AS CurrentProcedureObjectID;

逻辑说明

  1. 筛选当前会话的执行请求:利用SESSION_ID()匹配sys.dm_pdw_exec_requests中当前会话的运行中请求。
  2. 解析存储过程名称:从请求的sql_text字段中提取CREATE PROCEDURE语句后的存储过程完整名称(架构+名称)。
  3. 关联系统视图获取Object ID:通过解析出的名称,关联sys.procedures视图,匹配对应的存储过程记录并获取object_id。

适配提示

  • 若存储过程定义包含换行、注释或非标准格式,需要调整字符串解析的逻辑,确保准确提取名称。
  • 当会话存在多个并行请求时,可添加req.request_id的筛选(可结合会话上下文获取)来精准定位目标请求。

内容的提问来源于stack exchange,提问作者John Scott Stensland

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 23:25:00